diff --git a/.github/ISSUE_TEMPLATE/add-entry.yml b/.github/ISSUE_TEMPLATE/add-entry.yml new file mode 100644 index 0000000..21f0079 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/add-entry.yml @@ -0,0 +1,134 @@ +name: Add an entry +description: Submit a plugin, theme, agent, project or resource. A bot validates it and opens the pull request for you. +title: "Add: " +labels: ["submission"] +body: + - type: markdown + attributes: + value: | + Fill in the fields below; you never have to write YAML or touch the README. A bot checks the entry within a minute, comments here, and opens a pull request when it passes. Edit this issue to fix anything it reports. + + **Plugins must be built on OpenCode V2**: depend on `@opencode/plugin` and export `Plugin.define({ id, setup(ctx) })`. The check reads your package.json (or npm package) to verify this. See the [catalog policy](https://github.com/Heretek-AI/awesome-opencode/blob/main/docs/policy.md). + - type: input + id: name + attributes: + label: Name + description: Display name (max 80 characters). + placeholder: Quota Board + validations: + required: true + - type: input + id: repo + attributes: + label: Repository URL + description: The repository root, e.g. https://github.com/owner/repo. For a package inside a monorepo, use the next field for its folder. + placeholder: https://github.com/owner/repo + validations: + required: true + - type: input + id: path + attributes: + label: Folder inside the repository + description: Only for monorepos, e.g. packages/my-plugin. + - type: input + id: npm + attributes: + label: npm package + description: The package users install, if any (e.g. opencode-my-plugin). Strongly recommended for plugins. + - type: dropdown + id: category + attributes: + label: Category + options: + - plugins + - themes + - agents + - projects + - resources + validations: + required: true + - type: dropdown + id: kind + attributes: + label: Kind + description: "plugins → plugin; themes → theme; agents → agent or skill; projects → client, tool, mcp-server, skill, agent or fork; resources → guide, config, mcp-server, skill or tool." + options: + - plugin + - theme + - agent + - skill + - mcp-server + - client + - tool + - config + - guide + - fork + validations: + required: true + - type: dropdown + id: topics + attributes: + label: Topics + description: Pick 1 to 3. The first one decides where it appears in the README. + multiple: true + options: + - memory + - context + - orchestration + - workflow + - providers + - cost + - notifications + - sessions + - code-quality + - security + - git + - remote + - web + - ui + - voice + - media + - docs + - environment + - observability + - integrations + - code-intel + - prompting + - domain + validations: + required: true + - type: input + id: tagline + attributes: + label: Tagline + description: One short line, max 120 characters. + placeholder: Provider quotas and reset countdowns in the OpenCode sidebar + validations: + required: true + - type: textarea + id: description + attributes: + label: Description + description: What it does and why it's useful (max 1500 characters). + validations: + required: true + - type: input + id: homepage + attributes: + label: Documentation URL + description: Only if the docs live somewhere other than the repository. + - type: textarea + id: installation + attributes: + label: Installation + description: Optional short install snippet (markdown). + render: markdown + - type: checkboxes + id: policy + attributes: + label: Checklist + options: + - label: The repository is public and maintained by me or the project I'm representing, or I'm a user recommending it. + required: true + - label: It is not a cryptocurrency, token, or trading project (these are not accepted). + required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 671dbd5..31b2962 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,35 +1,17 @@ -## Submission Type + -## Details +## What does this add or change? -**Name:** -**Repository:** -**Tagline:** + -## Checklist +## Plugins only: OpenCode V2 -- [ ] Relevant to OpenCode -- [ ] Repository is public and accessible -- [ ] Actively maintained -- [ ] Not a duplicate -- [ ] YAML file in correct folder (`data/{category}/`) -- [ ] Filename is kebab-case (e.g., `my-plugin.yaml`) +- [ ] The plugin depends on `@opencode/plugin` (not the legacy `@opencode-ai/plugin` 1.x) and exports `Plugin.define({ id, setup(ctx) })`. -## YAML Format - -Create a file in `data/{category}/your-entry.yaml`: - -```yaml -name: Your Entry Name -repo: https://github.com/owner/repo -tagline: Short punchy summary (shown in collapsed view) -description: Longer description explaining what it does. -``` - -See [contributing.md](contributing.md) for full instructions. +New V1 plugins are not accepted. The `validate` check verifies this automatically and explains anything it can't confirm. See [docs/policy.md](https://github.com/Heretek-AI/awesome-opencode/blob/main/docs/policy.md). diff --git a/.github/workflows/generate-readme.yml b/.github/workflows/generate-readme.yml index cea4d5c..1cc0d61 100644 --- a/.github/workflows/generate-readme.yml +++ b/.github/workflows/generate-readme.yml @@ -6,10 +6,18 @@ on: - main paths: - 'data/**' + - 'templates/**' + - 'scripts/**' workflow_dispatch: +# main requires a passing "validate" check, which rulesets only accept through a pull request merge. +# The regenerated README therefore goes through a bot PR from bot/readme-: this job approves the +# PR's held validate run, waits for it, and squash-merges the PR once the check passes. permissions: contents: write + pull-requests: write + actions: write + checks: read concurrency: group: auto-generate-readme-main @@ -21,49 +29,93 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: - ref: ${{ github.ref }} + ref: main + # Full history: "Recently added" is derived from when each entry file was first committed + fetch-depth: 0 persist-credentials: true - - name: Setup Node.js 20 - uses: actions/setup-node@v4 + - name: Setup Node.js + uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '24' + cache: npm - name: Install dependencies - run: npm ci + run: npm ci --ignore-scripts - - name: Generate and push README/registry + - name: Generate, validate and merge README/registry + env: + GH_TOKEN: ${{ github.token }} run: | set -euo pipefail git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - for attempt in 1 2 3 4 5; do - echo "Generation attempt ${attempt}" - git fetch origin main - git reset --hard origin/main - - node scripts/generate-readme.js - node scripts/export-json.js --pretty --output dist/registry.json - - if git diff --quiet -- README.md dist/registry.json; then - echo "README.md and dist/registry.json are already current." - exit 0 - fi - - git add README.md dist/registry.json - git commit -m "docs: auto-regenerate README and registry data" - - if git push origin HEAD:main; then - exit 0 - fi - - echo "Push raced with another main update; retrying..." - sleep 2 + # Close bot README PRs left open by earlier failed runs; this run supersedes them + for old in $(gh pr list --state open --search "head:bot/readme-" --json number,headRefName \ + --jq '.[] | select(.headRefName | startswith("bot/readme-")) | .number'); do + gh pr close "$old" --delete-branch --comment "Superseded by a newer README regeneration." || true done - echo "Failed to push regenerated README/registry after retries" >&2 + # Both scripts validate the whole catalog and exit non-zero without writing on any error + node scripts/generate-readme.js + node scripts/export-json.js --pretty --output dist/registry.json + + if git diff --quiet -- README.md dist/registry.json; then + echo "README.md and dist/registry.json are already current." + exit 0 + fi + + git add README.md dist/registry.json + git commit -m "docs: auto-regenerate README and registry data" + sha="$(git rev-parse HEAD)" + branch="bot/readme-${sha:0:12}" + git push --force origin "HEAD:refs/heads/${branch}" + + pr="$(gh pr create --base main --head "${branch}" \ + --title "docs: auto-regenerate README and registry data" \ + --body "Automated by \`generate-readme.yml\` after ${GITHUB_SHA:0:12}. Merged automatically once \`validate\` passes.")" + echo "Opened ${pr}" + + # GitHub holds pull_request runs on bot-opened PRs for approval; approve our own validate run + approved="" + for i in $(seq 1 18); do + sleep 5 + run_id="$(gh api "repos/${GITHUB_REPOSITORY}/actions/workflows/validate-pr.yml/runs?head_sha=${sha}&event=pull_request" \ + --jq '[.workflow_runs[] | select(.conclusion == "action_required")][0].id // ""')" + if [ -n "${run_id}" ]; then + gh api -X POST "repos/${GITHUB_REPOSITORY}/actions/runs/${run_id}/approve" >/dev/null + approved="${run_id}" + break + fi + # Already running without approval (policy change): nothing to approve + if [ -n "$(gh api "repos/${GITHUB_REPOSITORY}/actions/workflows/validate-pr.yml/runs?head_sha=${sha}&event=pull_request" --jq '.workflow_runs[0].id // ""')" ]; then + break + fi + done + echo "validate run approved: ${approved:-none needed}" + + conclusion="" + for i in $(seq 1 60); do + sleep 10 + conclusion="$(gh api "repos/${GITHUB_REPOSITORY}/commits/${sha}/check-runs?check_name=validate" \ + --jq '[.check_runs[] | select(.status == "completed") | .conclusion][0] // ""')" + [ -n "${conclusion}" ] && break + done + if [ "${conclusion}" != "success" ]; then + echo "validate on ${sha} finished with '${conclusion:-timeout}'; leaving ${pr} open for a maintainer" >&2 + exit 1 + fi + + # The required check can take a moment to register on the PR + for i in 1 2 3 4 5 6; do + if gh pr merge "${pr}" --squash --delete-branch --subject "docs: auto-regenerate README and registry data"; then + exit 0 + fi + sleep 10 + done + echo "Could not merge ${pr}; leaving it open for a maintainer" >&2 exit 1 diff --git a/.github/workflows/health.yml b/.github/workflows/health.yml new file mode 100644 index 0000000..8d3f41c --- /dev/null +++ b/.github/workflows/health.yml @@ -0,0 +1,41 @@ +# Nightly catalog health: updates the "Catalog health report" issue, and opens bot PRs that follow +# renamed repos and remove entries dead for 30+ days (or V1-only plugins after the sunset date). +name: Catalog health + +on: + schedule: + - cron: '17 5 * * *' + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + issues: write + actions: write + +concurrency: + group: catalog-health + cancel-in-progress: false + +jobs: + health: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v7 + with: + node-version: '24' + cache: npm + + - name: Install dependencies + run: npm ci --ignore-scripts + + - name: Check health and open bot PRs + env: + GITHUB_TOKEN: ${{ github.token }} + run: node scripts/health-check.js --issue --open-prs diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml new file mode 100644 index 0000000..e1878ab --- /dev/null +++ b/.github/workflows/issues.yml @@ -0,0 +1,78 @@ +# Issue automation: +# - "Add an entry" form submissions (label: submission) become PRs on submission/. +# - Ticked candidates in Scout issues (label: scout) become PRs on scout/. +# +# Security: issue text is untrusted. It is only read by the Node scripts as data (via the API); +# nothing from the issue is interpolated into shell commands. +name: Issue automation + +on: + issues: + types: [opened, edited, reopened, labeled] + +permissions: + contents: read + +concurrency: + group: issue-${{ github.event.issue.number }} + cancel-in-progress: false + +jobs: + submission: + if: contains(github.event.issue.labels.*.name, 'submission') && github.event.issue.state == 'open' + permissions: + contents: write + pull-requests: write + issues: write + actions: write + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v7 + with: + node-version: '24' + cache: npm + + - name: Install dependencies + run: npm ci --ignore-scripts + + - name: Build entry and open PR + env: + GITHUB_TOKEN: ${{ github.token }} + ISSUE_NUMBER: ${{ github.event.issue.number }} + run: node scripts/submit-entry.js --issue "$ISSUE_NUMBER" + + scout-accept: + if: github.event.action == 'edited' && contains(github.event.issue.labels.*.name, 'scout') + permissions: + contents: write + pull-requests: write + issues: write + actions: write + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v7 + with: + node-version: '24' + cache: npm + + - name: Install dependencies + run: npm ci --ignore-scripts + + - name: Open PRs for ticked candidates + env: + GITHUB_TOKEN: ${{ github.token }} + ISSUE_NUMBER: ${{ github.event.issue.number }} + SENDER: ${{ github.event.sender.login }} + run: node scripts/scout.js accept --issue "$ISSUE_NUMBER" --sender "$SENDER" diff --git a/.github/workflows/reprobe.yml b/.github/workflows/reprobe.yml new file mode 100644 index 0000000..d034350 --- /dev/null +++ b/.github/workflows/reprobe.yml @@ -0,0 +1,51 @@ +# Nightly re-check of PRs labeled needs-v2: unblocks them once the target migrates to the V2 plugin +# API, and closes them after 60 days on V1 (see docs/policy.md). +name: Re-check V2 migrations + +on: + schedule: + - cron: '43 6 * * *' + workflow_dispatch: + inputs: + pr: + description: 'Only this PR number (optional)' + required: false + +permissions: + contents: write + pull-requests: write + issues: write + actions: write + +concurrency: + group: reprobe + cancel-in-progress: false + +jobs: + reprobe: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + persist-credentials: false + + - name: Setup Node.js + uses: actions/setup-node@v7 + with: + node-version: '24' + cache: npm + + - name: Install dependencies + run: npm ci --ignore-scripts + + - name: Re-check held PRs + env: + GITHUB_TOKEN: ${{ github.token }} + ONLY_PR: ${{ inputs.pr }} + run: | + if [ -n "${ONLY_PR:-}" ]; then + node scripts/reprobe.js --pr "$ONLY_PR" + else + node scripts/reprobe.js + fi diff --git a/.github/workflows/scout.yml b/.github/workflows/scout.yml new file mode 100644 index 0000000..25dd9bf --- /dev/null +++ b/.github/workflows/scout.yml @@ -0,0 +1,36 @@ +# Weekly discovery of OpenCode V2 plugins and SDK tools on npm that are not in the catalog yet. +# Opens a "Scout" issue; ticking a candidate's box opens a PR (see issues.yml). +name: Scout V2 packages + +on: + schedule: + - cron: '0 8 * * 1' + workflow_dispatch: + +permissions: + contents: read + pull-requests: read + issues: write + +jobs: + scout: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + persist-credentials: false + + - name: Setup Node.js + uses: actions/setup-node@v7 + with: + node-version: '24' + cache: npm + + - name: Install dependencies + run: npm ci --ignore-scripts + + - name: Find candidates + env: + GITHUB_TOKEN: ${{ github.token }} + run: node scripts/scout.js run diff --git a/.github/workflows/site.yml b/.github/workflows/site.yml new file mode 100644 index 0000000..1e0d16b --- /dev/null +++ b/.github/workflows/site.yml @@ -0,0 +1,69 @@ +# Builds the search site (site/ + registry.json + fresh health.json) and deploys it to GitHub Pages. +name: Deploy search site + +on: + push: + branches: + - main + paths: + - 'data/**' + - 'site/**' + - 'scripts/**' + schedule: + - cron: '30 5 * * *' + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + persist-credentials: false + + - name: Setup Node.js + uses: actions/setup-node@v7 + with: + node-version: '24' + cache: npm + + - name: Install dependencies + run: npm ci --ignore-scripts + + - name: Build site + env: + GITHUB_TOKEN: ${{ github.token }} + run: | + node scripts/health-check.js --out "$RUNNER_TEMP/health.json" || echo "::warning::health check failed; deploying without health data" + if [ -f "$RUNNER_TEMP/health.json" ]; then + node scripts/build-site.js --health "$RUNNER_TEMP/health.json" + else + node scripts/build-site.js + fi + + - name: Upload artifact + uses: actions/upload-pages-artifact@v5 + with: + path: _site + + deploy: + needs: build + permissions: + pages: write + id-token: write + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v5 diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml new file mode 100644 index 0000000..81ef67f --- /dev/null +++ b/.github/workflows/triage.yml @@ -0,0 +1,43 @@ +# Labels PRs (needs-v2 / needs-metadata / needs-human / ready, plus category) and keeps one comment +# with the check results up to date. +# +# Security: pull_request_target runs with a write token, so this workflow checks out the BASE branch +# only. PR files are fetched through the API and parsed as data; PR code is never executed here. +name: Triage PR + +on: + pull_request_target: + types: [opened, synchronize, reopened, ready_for_review] + +permissions: + contents: read + pull-requests: write + issues: write + +concurrency: + group: triage-${{ github.event.pull_request.number }} + cancel-in-progress: true + +jobs: + triage: + runs-on: ubuntu-latest + steps: + - name: Checkout base branch + uses: actions/checkout@v7 + with: + persist-credentials: false + + - name: Setup Node.js + uses: actions/setup-node@v7 + with: + node-version: '24' + cache: npm + + - name: Install dependencies + run: npm ci --ignore-scripts + + - name: Label and comment + env: + GITHUB_TOKEN: ${{ github.token }} + PR_NUMBER: ${{ github.event.pull_request.number }} + run: node scripts/triage.js --pr "$PR_NUMBER" diff --git a/.github/workflows/validate-pr.yml b/.github/workflows/validate-pr.yml index e9a10be..171a08c 100644 --- a/.github/workflows/validate-pr.yml +++ b/.github/workflows/validate-pr.yml @@ -1,39 +1,59 @@ -name: Validate PR YAML Files +# The required "validate" status check. Runs on every PR (including README-only and non-data PRs, so +# hand edits to generated files get feedback). Runs on PRs opened by github-actions[bot] are held for +# approval by GitHub; the bot workflows approve their own. workflow_dispatch is for manual runs. +name: Validate PR on: pull_request: - paths: - - 'data/**' + workflow_dispatch: permissions: contents: read +concurrency: + group: validate-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + jobs: validate: + name: validate runs-on: ubuntu-latest steps: - - name: Checkout code - uses: actions/checkout@v4 + - name: Checkout + uses: actions/checkout@v7 + with: + fetch-depth: 0 + persist-credentials: false - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '24' + cache: npm - name: Install dependencies - run: npm ci + run: npm ci --ignore-scripts - - name: Get changed YAML files - id: changed-files - uses: tj-actions/changed-files@v44 - with: - files: | - data/**/*.yaml + - name: Unit tests + run: npm test - - name: Validate YAML files + - name: Check catalog changes + env: + GITHUB_TOKEN: ${{ github.token }} + # Compare against the current base branch, not pull_request.base.sha: on an older PR that is the base + # commit from when the PR was opened, which would count everything merged since as part of the PR + BASE_REF: origin/${{ github.event.pull_request.base.ref || 'main' }} + # Only the README bot's own PRs (opened by github-actions[bot] from this repo's bot/readme-* branches) + # may change the generated files + ALLOW_GENERATED: ${{ github.event_name == 'pull_request' && github.event.pull_request.user.login == 'github-actions[bot]' && github.event.pull_request.head.repo.full_name == github.repository && startsWith(github.head_ref, 'bot/readme-') }} run: | - if [[ -n "${{ steps.changed-files.outputs.all_changed_files }}" ]]; then - node scripts/validate.js ${{ steps.changed-files.outputs.all_changed_files }} + if [ "$ALLOW_GENERATED" = "true" ]; then + node scripts/check-pr.js --base "$BASE_REF" --allow-generated else - echo "No YAML files changed, skipping validation" + node scripts/check-pr.js --base "$BASE_REF" fi + + - name: README and registry still generate + run: | + node scripts/generate-readme.js + node scripts/export-json.js --output "$RUNNER_TEMP/registry.json" diff --git a/.gitignore b/.gitignore index 3af44cb..da509d1 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,6 @@ Thumbs.db *.swo # Generated (for local testing only - README.md is committed) + +# Built search site (deployed by .github/workflows/site.yml) +_site/ diff --git a/.opencode/commands/review.md b/.opencode/commands/review.md new file mode 100644 index 0000000..cdf677b --- /dev/null +++ b/.opencode/commands/review.md @@ -0,0 +1,15 @@ +--- +description: Review an open PR or issue for quality and OpenCode v2 compatibility +--- + +You are the maintainer review agent for `Heretek-AI/awesome-opencode`. +Your task is to review the specified PR or issue (or the next item in the backlog queue) against the OpenCode V2 compatibility and quality standards. + +Follow the guidelines defined in `prompts/opencode-review-loop.md`, including its "Deterministic Pre-Checks" and "Merging Rules" sections (labels and the `validate` check already cover schema, duplicates and V2 markers; merge only with `gh pr merge`, never by pushing to main): +1. Check if the target repo is public, maintained, and safe (no crypto/spam). +2. Check OpenCode V2 compatibility: + - For plugins: does it use `@opencode/plugin` and `Plugin.define` (V2), or legacy `@opencode-ai/plugin` (V1)? + - For projects/themes/agents/resources: does it work seamlessly with OpenCode V2? +3. Validate YAML schema adherence against `data/schema.json`. +4. Output the structured JSON assessment with verdict (`APPROVE_AND_MERGE`, `NEEDS_V2_UPDATE`, `NEEDS_METADATA_FIX`, `REJECT_ABANDONED`, `REJECT_POLICY`, `ISSUE_CONVERT_TO_PR`, or `ISSUE_CLOSE`). +5. Provide a clear recommendation and draft GitHub review comment. diff --git a/README.md b/README.md index ef1de85..2716247 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +
@@ -16,6 +17,16 @@ Opencode Stars

+ +

+English +   +简体中文 +   +Русский +

+ +
@@ -24,7 +35,23 @@
-[**OFFICIAL**](#official) • [**PLUGINS**](#plugins) • [**THEMES**](#themes) • [**AGENTS**](#agents) • [**PROJECTS**](#projects) • [**RESOURCES**](#resources) +> [!NOTE] +> **Active Hard Fork**: `Heretek-AI/awesome-opencode` is the actively maintained community continuation of `awesome-opencode`. +> All original upstream issues, pull requests, and discussions are preserved and imported. Submissions and PRs are actively reviewed! + +

513 entries  •  271 plugins: 134 V2, 125 V1 only (removed after 2027-01-01), 12 unverified

+ +

+🔎 Search & filter the catalog + •  +➕ Submit an entry + •  +📋 Catalog policy +

+ +
+ +[**OFFICIAL**](#official) • [**NEW**](#recently-added) • [**PLUGINS**](#plugins) • [**THEMES**](#themes) • [**AGENTS**](#agents) • [**PROJECTS**](#projects) • [**RESOURCES**](#resources)

@@ -46,149 +73,309 @@
+
+ +

🆕 Recently Added

+ +| Name | Category | Tagline | +| :--- | :--- | :--- | +| **[agent-sessions](https://github.com/prajwalgajakesari/agent-sessions)** | projects | Share OpenCode, Claude Code and Codex sessions with your team through git | +| **[OpenClient](https://github.com/ntoporcov/openclient)** | projects | Native iPhone and iPad companion for self-hosted OpenCode servers | +| **[PPT Design Skill](https://github.com/sunchaokun/PPT-Design-Skill)** | projects | One-liner PPT generation —40,000+ styles, AI images, fully editable .pptx | +| **[PDCA Skills](https://github.com/AlexeyShirshov/skills)** | agents | PDCA orchestration skills: PLAN → DO → CHECK → ACT with evidence-based verification | +| **[OpenChamber Design Studio](https://github.com/lastonoga/openchamber-design-studio)** | projects | Open, local alternative to Claude Design inside OpenChamber | +| **[Tapetide MCP](https://github.com/Tapetide-hq/nse-bse-indian-stock-market-data-mcp)** | resources | Indian stock market data (NSE and BSE) for OpenCode agents | +| **[assay](https://github.com/awss1i/assay)** | projects | Deterministic QA that drives every control on a web page and reports where it contradicts itself | +| **[Crit](https://github.com/tomasz-tomczyk/crit)** | projects | Review OpenCode plans and diffs in a local browser UI and send comments back to the agent. | +| **[PriceWin](https://github.com/PriceDotWin/pricewin-agent-plugin)** | projects | Remote MCP server and skill for live hotel and flight prices across Booking.com, Agoda, Trip.com and Traveloka | +| **[OpenCode Sentry](https://github.com/sudo-heyu/OpenCodesentry)** | projects | Android companion: scan-to-pair live OpenCode console + screen-off alerts over Tailscale | +| **[Kranz](https://github.com/kranz-org/kranz)** | projects | Inspect and control live development services from OpenCode over MCP | +| **[DataCloak](https://github.com/pratikwayal01/datacloak)** | plugins | Swap secrets and PII for realistic fakes before AI sees them; restore originals on return. | +| **[Sabi](https://github.com/vizuh/sabi)** | projects | Adaptive per-round inference routing for coding agents — model, effort and provider scheduled against the trajectory | +| **[Baizhi Cloud Agent Toolkit](https://github.com/chaitin/baizhi-agent-toolkit)** | resources | Remote web search and page extraction MCP for OpenCode agents | +| **[SCVD General Store](https://github.com/seancrecord/scvd-general-store-repo)** | projects | Skills and MCP tools for checking x402 endpoints before payment and signed receipts afterward | + +
+
-🧩 PLUGINS +🧩 PLUGINS (271)
+

Memory (27)

+
- @bluelovers/opencode-arise - 「⚔️ ARISE!」 A Solo Leveling themed orchestrator harness for OpenCode + AccInt V1 only - Local Work Model memory for OpenCode agents
- A lightweight, token-efficient orchestrator layer. Enables parallel background task execution in OpenCode. Launch AI agents to work simultaneously on exploration and research while continuing with other tasks. Allows specifying custom models for each_agent via configuration. + Accreted scored memory for OpenCode sessions with MCP retrieval and action verbs, lifecycle hooks, and cross-project acc.db continuity for agent work.

- 🔗 View Repository + 🔗 View Repository
- aerovato/opencode-quotes-plugin - Display inspirational quotes instead of tips + Agent Memory V2 - Persistent, self-editable memory and a local semantic journal
- Replaces the default home-page tips with inspirational quotes for a more motivating OpenCode experience. + Maintained OpenCode plugin providing shared global and project memory blocks, dedicated memory tools, and an opt-in append-only journal with local multilingual semantic search.

- 🔗 View Repository + 🔗 View Repository
- Agent Identity - Agent self-identity and per-message attribution for multi-agent sessions + basemind V2 MCP - Full AI context layer over MCP — code-map, document RAG, agent memory, web crawl, git history
- Two plugins that improve agent identity awareness. AgentSelfIdentityPlugin injects a one-liner into the system prompt so the model knows which agent it's operating as. AgentAttributionToolPlugin exposes a tool for querying per-message agent attribution via the SDK, useful for agents that review multi-agent sessions. + Full AI context layer over MCP — tree-sitter code-map, document RAG, shared agent memory, web crawl, and git history. 300+ languages. Published to npm as basemind-opencode (https://www.npmjs.com/package/basemind-opencode).

- 🔗 View Repository + 🔗 View Repository  •  📦 npm
- Agent Memory - Letta-inspired memory + codemem V2 - Persistent coding memory across sessions, machines, and teammates
- Gives the agent persistent, self-editable memory blocks inspired by Letta agents. + Captures coding decisions, discoveries, and fixes, with automatic context injection in OpenCode, Claude Code, and Codex. Includes MCP tools for searching and managing memories, a viewer, optional cross-machine sync, and sharing of selected projects with teammates.

- 🔗 View Repository + 🔗 View Repository  •  📖 Docs
- Agent Skills (JDT) - Dynamic skills loader + Daily Journal V2 - Auto-journal every conversation into daily/YYYY-MM-DD.md, record-only (never injects)
- Dynamic skills loader that discovers skills from project, user, and plugin directories. + An OpenCode V2 plugin that keeps a daily journal of your conversations. When a session turn finishes, the exchange is summarized into a diary entry and appended to daily/YYYY-MM-DD.md. Record only, never inject: entries are plain Markdown on disk and are never added to session context unless you explicitly ask the agent to read them. Writes are concurrency-safe (file lock + append-only + idempotent markers, so simultaneous sessions never overwrite or duplicate each other), and summaries use a model fallback chain (session model, then other configured models, then a raw excerpt) so nothing is lost when a model is unavailable.

- 🔗 View Repository + 🔗 View Repository
- Antigravity Auth - Google Antigravity models + deja V2 - Recall what you already did in your other coding agents
- Use Gemini and Anthropic models for free via Google Antigravity IDE authentication. + opencode remembers its own sessions. deja answers the other question: what you did in Claude Code, Codex, Cursor, Gemini CLI, Zed and fifteen more agents on this machine — including the months before you installed anything. + +A local Go binary indexes the transcripts those agents already wrote to disk, and the plugin gives the model six tools over that index: recall past sessions by error or symbol, read the digest of one session, see which sessions discussed a file before you edit it, ask what this machine actually ran after a given error, and store a decision worth keeping. Recall also arrives unasked — once per session on the system prompt, and a relevance pass per prompt that stays silent when history has no answer. + +BM25 over local files. No LLM, no embeddings, no network. Credentials are redacted at index time.

- 🔗 View Repository + 🔗 View Repository  •  📦 npm
- Antigravity Multi-Auth - Multiple Google accounts + Ditto unverified - Mines your local AI coding session logs into a personal profile your agent loads before every task
- Fork of opencode-antigravity-auth that allows using multiple Google accounts with automatic rotation when rate limited. + Mines local AI coding session logs (OpenCode, Claude Code, Codex, Copilot CLI) into a personal working profile. The OpenCode adapter reads OpenCode's SQLite session store and installs the profile into OpenCode's global rules so the agent loads it before every task. Single stdlib-only Python file, runs locally, MIT licensed.

- 🔗 View Repository + 🔗 View Repository
- Autotitle - AI-powered automatic session naming + Ejentum unverified MCP - MCP server with reasoning, code, anti-deception, and memory tools for AI agents
- Two-phase session titling - instant keyword titles on user message, refined AI titles after response. Auto-selects cheapest model (flash/haiku/fast), respects custom titles, zero configuration needed. + MCP server with four tools (harness_reasoning, harness_code, harness_anti_deception, harness_memory) that AI agents can call on demand. Each tool returns a structured prompt the calling agent ingests before generating.

- 🔗 View Repository + 🔗 View Repository  •  📖 Docs
- Background - Background process management + Episodic Memory V2 - Semantic search over your past conversations — local embeddings, no cloud
- Background process management plugin for opencode. + Indexes your OpenCode session history into a local SQLite store and lets the agent recall past discussions, decisions, and patterns via native episodic_search/episodic_read tools. Fully local and offline — embeddings run in-process via Transformers.js (Snowflake arctic-embed, model chosen by empirical eval), with vector, BM25, and hybrid RRF search modes. Auto-reindexes on session idle; opt-out marker for sensitive chats. Inspired by obra/episodic-memory for Claude Code, rebuilt natively for OpenCode primitives.

- 🔗 View Repository + 🔗 View Repository
- Background Agents - Async agent delegation + Harness Memory V1 only - Persistent project memory - 73 percent fewer tokens than CLAUDE.md, with human review
- Claude Code-style background agents with async delegation and context persistence. + Auto-captures evidence from tool interactions and materializes memories through a multi-gate pipeline. 4-layer activation engine selects the right memories per context. Replaces CLAUDE.md with structured, searchable, reviewable project memory. Local-first (sql.js WASM), zero cloud dependency.

- 🔗 View Repository + 🔗 View Repository
- Beads Plugin - Beads issue tracker integration + Honcho V2 - AI-native long-term memory for OpenCode
- Integration for Steve Yegge's beads issue tracker with /bd-* commands. + Give OpenCode persistent memory that survives context wipes, session restarts, and fresh chats. Honcho remembers what you're working on, durable preferences, and prior context across projects. Supports cloud and self-hosted deployments with configurable session strategies.

- 🔗 View Repository + 🔗 View Repository
- BRHP - Persistent planning state + Lemma unverified MCP - Persistent memory layer for LLMs via MCP - local, zero-dependency, works on all clients
- Structured, persistent planning for OpenCode with local session state, /brhp commands, bounded planner history, and a TUI sidebar. + Biological memory model for AI coding agents. Features confidence decay/boost, Fuse.js fuzzy dedup, guide system with usage tracking, cross-references, cumulative backup, virtual session tracking, and universal memory injection via tool descriptions (works on Claude Desktop, Cursor, VS Code, Gemini CLI, opencode, and any MCP client). No API keys, no cloud, fully local JSONL storage. 20 MCP tools, 110 tests, MIT licensed.

- 🔗 View Repository + 🔗 View Repository
- CC Safety Net - Safety net catching destructive commands + Lore V1 only - Long-term memory for OpenCode with boot baseline and per-prompt recall
- A Claude Code plugin that acts as a safety net, catching destructive git and filesystem commands before they execute. + Native plugin that connects OpenCode to a Lore memory server. A fixed boot baseline loads identity, workflow and preference memories into the system context at session start, recall surfaces relevant memories before each prompt, and durable facts are written back through guarded lore_* tools to a URI-addressed memory graph shared with Claude Code, Codex and other runtimes. Self-hosted with Docker or use the managed Loremem service.

- 🔗 View Repository + 🔗 View Repository  •  📖 Docs
- Claude Code Switch (CCS) OpenCode Sync - Claude Code Switch (CCS) to OpenCode sync + Mem0 OpenCode Plugin V1 only - Persistent memory plugin so your agent remembers across sessions
- An OpenCode plugin that reads your Claude Code Switch (CCS) configuration and automatically syncs the providers into your OpenCode config. + OpenCode plugin that gives your agent persistent memory powered by Mem0. Includes 9 MCP memory tools, 16 slash commands, and lifecycle hooks that auto-capture decisions, search prior context at session start, and pre-fetch error memories on failures. Install with `opencode plugin @mem0/opencode-plugin`.

- 🔗 View Repository + 🔗 View Repository
- Command Inject - Auto-inject project commands into OpenCode + oc-mnemoria V1 only - Persistent shared memory (hive mind) for OpenCode agents across sessions
- Automatically discovers and injects Makefile targets, npm/pnpm/yarn/bun scripts, and local skills at startup. Type / to see and run all project commands. + Gives all OpenCode agents a shared persistent memory store where every agent can read and write. Each entry is tagged with the creating agent (plan, build, ask, review) so no context is lost between roles. Powered by the mnemoria Rust engine with hybrid BM25 + semantic search, CRC32 checksum chains, and an append-only binary format. Includes 7 tools and /mn-* slash commands.

- 🔗 View Repository + 🔗 View Repository
- Context Analysis - Token usage analysis + oh-my-agentmemory V2 - Forces agents to actually write to agentmemory, not just read from it +
+ Companion plugin to agentmemory-capture. Re-injects a memory policy directive into the system prompt every turn so the agent actually calls memory_save, bootstraps empty pinned slots on session start, catches bilingual intent keywords (EN/KR), auto-saves lessons from error-signal file edits, and suggests crystallizing finished work. Installs from npm with one line in opencode.json. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Claude Memory V2 - Claude Code-compatible memory +
+ Share persistent Markdown memory between OpenCode and Claude Code using Claude Code-compatible paths and file formats. +

+ 🔗 View Repository +
+
+ +
+ Opencode Mem V2 - Persistent local memory with Turso/libSQL vector search +
+ A persistent memory system for AI coding agents that enables long-term context retention across sessions using embedded Turso/libSQL vector search. Features dual memory scopes, auto-capture, user profile learning, a full web UI, and multi-provider AI support. +

+ 🔗 View Repository +
+
+ +
+ Opencode MemPalace Persistence V2 - Local-first persistent memory for OpenCode, backed by MemPalace +
+ Saves every conversation to a local MemPalace palace and recalls it verbatim in later sessions. Mines run on idle, exit and startup — never mid-reply. Zero-config: the plugin registers its own read-only MCP entry, so multiple OpenCode tabs never starve each other on the palace writer lock. Ships a live sidebar status line and a companion local browser/curator (penfield) for timeline, knowledge graph, thread view and duplicate healing. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ opencode-short-term-memory V1 only - Maintain user instructions and preferences throughout long sessions. No more repeating yourself. +
+ Automatically summarizes conversation context into structured session memory and injects it back into the system prompt every few turns — preserving user instructions, project context, decisions, and active references across long chats and compactions. +

+ 🔗 View Repository +
+
+ +
+ Simple Memory V2 - Git-based memory +
+ Simple plugin to manage memory inside a git repo that can be committed and reviewed by team members. +

+ 🔗 View Repository +
+
+ +
+ Solo Memory V1 only - Transparent long-term memory — auto weave/ingest, no agent discipline required +
+ A transparent long-term memory plugin for OpenCode. The chat.message hook auto-injects memory context before every turn, and the event hook auto-stores user+assistant pairs after replies — the agent never needs to remember to call memory tools. Local-first (SQLite + ChromaDB, zero cloud), bilingual (Chinese via BM25/jieba, English via semantic bge-large-en-v1.5), with a gap-detection → crawl → synthesize → verify learning loop and 7 MCP tools. +

+ 🔗 View Repository +
+
+ +
+ SourcePier V2 - Persistent project documents across OpenCode sessions +
+ Manage project-scoped Markdown documents in the OpenCode v2 native TUI. Import, search, edit, and export Sources across sessions, while agents can discover and read them through read-only tools. +

+ 🔗 View Repository +
+
+ +
+ Unforgit V2 - Git-backed repository memory for AI agents +
+ Unforgit gives OpenCode and other coding agents durable, repository-scoped memory through MCP. Store and recall project decisions, conventions, gotchas, and playbooks locally in a Git-backed memory base, with optional sync and curation workflows. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ With Context MCP unverified MCP - Project-specific markdown notes +
+ MCP server for managing project-specific markdown notes with templates, batch edits, and ignore patterns. +

+ 🔗 View Repository +
+
+ +
+ Worktree Memory Sync V1 only - Auto-sync memory to git worktrees +
+ Automatically copies .opencode/memory/ from the main repository into new git worktrees on session init. Detects worktrees via the .git file, resolves the main repo, and syncs memory files only when the destination is empty — so it never overwrites your changes. +

+ 🔗 View Repository +
+
+ +
+ WPM V1 only - Confidence-weighted persistent memory with proofs +
+ Local project memory maintained automatically during work. Every memory carries a 0-1 confidence score that only rises with external proofs; entries are validated or contradicted with evidence, never deleted, and deduplicated. Hybrid semantic + graph retrieval recalls the right memory when it matters. +

+ 🔗 View Repository +
+
+ +
+ +

Context & Tokens (13)

+ +
+ cache-stats V1 only - Showing the active session's cache hit rate in a popup dialog +
+ This plugin shows the overall cache hit rate, a per-model breakdown, a per subagent breakdown and the associated cost, making it easy to understand cache performance at a glance. +

+ 🔗 View Repository +
+
+ +
+ Chisle V1 only - Cuts token use with terse answers, smallest-code-that-works rules and tool-output compression +
+ Installs a ruleset for terse answers that keep every decisive fact and a "smallest code that works" ladder, Chisle skills, and a compression plugin that trims oversized tool output before it re-enters the context. The same ruleset ships for Claude Code, Cursor, Codex and Gemini CLI. Install with `npx chisle --only opencode`. MIT, zero dependencies, benchmarks with raw transcripts in the repository. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Context Analysis V1 only - Token usage analysis
An opencode plugin that provides detailed token usage analysis for your AI sessions.

@@ -197,52 +384,25 @@
- Crawlberg - Web crawling and scraping tools for opencode + Context Optimizer V2 - Coding Agent Context Optimizer Plugin
- OpenCode plugin exposing crawlberg CLI tools for scraping pages, crawling sites, and mapping URLs to JSON or Markdown. + Keep your coding agent's context small. When a session gets compacted, Context Optimizer reranks the relevant parts, drops duplicates, and compresses the rest with a local ML pipeline (LLMLingua-2 + Sentence Transformers) — so more of the window stays useful and fewer tokens get billed. Everything runs on your machine.

- 🔗 View Repository + 🔗 View Repository
- CrewBee - Task-specific Agent Teams for OpenCode + ContextStream V2 MCP - Shared project context for OpenCode, Cursor, Claude Code, Codex, and Grok via MCP
- CrewBee is an independent Agent Team framework for OpenCode. It lets users define reusable task/project-specific Agent Teams, project them into OpenCode agents, and switch between single-agent execution and multi-agent collaboration based on task complexity. It also includes built-in Team templates such as a Coding Team with review flow and completion criteria. + Hosted MCP server that keeps coding agents on shared project context across sessions and teammates. Works with OpenCode and other MCP-compatible clients. Endpoint https://mcp.contextstream.io/mcp — Intelligence isn’t the bottleneck. Context is.

- 🔗 View Repository + 🔗 View Repository  •  📖 Docs
- Devcontainers - Multi-branch devcontainers -
- Plugin for running multiple devcontainer instances with auto-assigned ports and branch-based isolation. -

- 🔗 View Repository -
-
- -
- Direnv - Load direnv variables -
- Automatically loads direnv environment variables at session start. Perfect for Nix flakes. -

- 🔗 View Repository -
-
- -
- Dodo Payments - Payments, subscriptions, webhooks, and billing for OpenCode agents -
- Official Dodo Payments plugin for OpenCode (also Claude Code, Codex, Cursor). Bundles eight integration skills (checkout, subscriptions, webhooks, usage-based billing, credits, license keys, BillingSDK, best practices) plus two MCP servers — a live API server with browser OAuth and a documentation search server. Distributed via npm as @dodopayments/opencode-plugin. -

- 🔗 View Repository -
-
- -
- Dynamic Context Pruning - Optimize token usage + Dynamic Context Pruning V2 - Optimize token usage
Plugin that optimises token usage by pruning obsolete tool outputs from conversation context.

@@ -251,25 +411,128 @@
- Ejentum - MCP server with reasoning, code, anti-deception, and memory tools for AI agents + Magic Context V2 - Lossless context management with background compression
- MCP server with four tools (harness_reasoning, harness_code, harness_anti_deception, harness_memory) that AI agents can call on demand. Each tool returns a structured prompt the calling agent ingests before generating. + Cache-aware context management that keeps long sessions productive. Background historian compresses old conversation into structured compartments while you keep working. Includes cross-session project memory, unified search across history/memories/facts, overnight dreamer for memory maintenance, and prompt-cache-safe deferred operations.

- 🔗 View Repository + 🔗 View Repository
- Envsitter Guard - Prevent .env leaks + OpenCode Autocompact V2 - Per-session autocompact — /autocompact 500k compacts a session and its children early
- OpenCode plugin that prevents agents/tools from reading or editing sensitive .env* files, while still allowing safe inspection via EnvSitter (keys + deterministic fingerprints; never values). + Claude Code's autocompact, with a knob. Compacts a session before the model's real context limit, at a token count you choose per session. OpenCode's built-in auto-compaction is configured globally and only relative to the model limit, so on a 256K or 1M context model it kicks in very late; this adds an earlier, deliberate ceiling for one session and its children, useful for cheaper requests, more headroom for large tool results, or a shorter tail for the summarizer. Thresholds are inherited by subagents by walking the parentID chain, `/autocompact off` reverts to normal behaviour, and with no threshold set the plugin has zero footprint. When a threshold applies, a chip joins the prompt footer and a side panel shows the numbers. Tested against 2.0.24.

- 🔗 View Repository + 🔗 View Repository  •  📦 npm
- FlowDeck - AI-powered multi-agent workflow orchestration with built-in safety intelligence + Opencode Ignore V1 only - Ignore files based on pattern +
+ Plugin to ignore directory/file based on pattern. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Stats Pills V2 - Inline TUI stats bar for generation speed, tokens, cache hits, cost, and context usage +
+ A compact stats bar under the OpenCode V2 input box showing streamed output speed (tok/s), average TTFT, token usage with cache hits and reasoning, session cost, and context-window usage, without opening the sidebar. Click any pill for a detail panel. Context usage follows OpenCode's own calculation, custom per-model prices are supported, and parent and subagent sessions are tracked separately. Tested on OpenCode 2.0.29; UI text is currently in Chinese. +

+ 🔗 View Repository +
+
+ +
+ opencode-cache-compact V2 - Cache-friendly compaction for locally hosted models +
+ Replaces OpenCode's built-in compaction, which rebuilds the prompt from scratch (no system prompt, no tools, history re-serialized) and therefore cold-prefills the whole conversation. This plugin appends the summary turn instead — a cache hit — and then rewrites only the outgoing message list down to that summary, so a locally hosted model reuses its KV cache instead of re-reading everything. Aimed at llama.cpp / LM Studio / vLLM setups where prefilling a large context is the expensive part. +

+ 🔗 View Repository +
+
+ +
+ opencode-snip V1 only - OpenCode plugin that prefixes shell commands with snip to reduce LLM token consumption by 60-90% +
+ Automatically prefixes supported shell commands (git, go, cargo, npm, docker, etc.) with snip to filter output before it reaches your LLM context window. +

+ 🔗 View Repository +
+
+ +
+ Topic Compaction V2 - Appends late-position overrides to compaction prompts for topic-based session summarization. +
+ This plugin improves session compaction continuity by restructuring how opencode summarizes file activity. Instead of a single linear stream that can lose track of pending work, the plugin clusters actual file activity into thematic topics during compaction. Each topic carries an explicit `blocked:` status field, and open blockers are guaranteed to survive across successive compaction cycles, ensuring unresolved work persists through session restarts. +

+ 🔗 View Repository +
+
+ +
+ +

Multi-Agent & Orchestration (32)

+ +
+ @bluelovers/opencode-arise V1 only - 「⚔️ ARISE!」 A Solo Leveling themed orchestrator harness for OpenCode +
+ A lightweight, token-efficient orchestrator layer. Enables parallel background task execution in OpenCode. Launch AI agents to work simultaneously on exploration and research while continuing with other tasks. Allows specifying custom models for each_agent via configuration. +

+ 🔗 View Repository +
+
+ +
+ Agent Identity V1 only - Agent self-identity and per-message attribution for multi-agent sessions +
+ Two plugins that improve agent identity awareness. AgentSelfIdentityPlugin injects a one-liner into the system prompt so the model knows which agent it's operating as. AgentAttributionToolPlugin exposes a tool for querying per-message agent attribution via the SDK, useful for agents that review multi-agent sessions. +

+ 🔗 View Repository +
+
+ +
+ AIDevOps V2 - AI DevOps framework and OpenCode plugin +
+ OpenCode-first AI DevOps framework with agents, skills, workflows, safety hooks, memory, GitHub worker dispatch, and integrations for code, infrastructure, content, SEO, and operations. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ AION V2 - Time-series harness with multi-agent review, skills, tools, and hooks +
+ A compiled TypeScript OpenCode plugin that turns OpenCode into a time-series research harness. Bundles six specialized agents (orchestrator, requirements analyst, information collector, coder, and two critic roles), seventeen skills, twenty-plus tools, and eight coordination protocols into one self-contained bundle installed via a one-command CLI. Enforces a four-layer model (task, workspace, execution, review) with hard gates for data-leakage detection, ablation-backed statistical rigor, and dual-critic governance before any output ships. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Background Agents V1 only - Async agent delegation +
+ Claude Code-style background agents with async delegation and context persistence. +

+ 🔗 View Repository +
+
+ +
+ CrewBee V1 only - Task-specific Agent Teams for OpenCode +
+ CrewBee is an independent Agent Team framework for OpenCode. It lets users define reusable task/project-specific Agent Teams, project them into OpenCode agents, and switch between single-agent execution and multi-agent collaboration based on task complexity. It also includes built-in Team templates such as a Coding Team with review flow and completion criteria. +

+ 🔗 View Repository +
+
+ +
+ FlowDeck V1 only - AI-powered multi-agent workflow orchestration with built-in safety intelligence
FlowDeck adds a structured, multi-agent development workflow to OpenCode. It coordinates 25 specialist agents through a four-phase cycle — discuss, plan, execute, review — with persistent state that survives session restarts. @@ -285,95 +548,22 @@ Key features: - Built-in MCPs: Context7 (docs), Exa (web search), Grep.app (code search) - Ensemble Reasoning via `/fd-council` for synthesized consensus from multiple agents - Persistent Memory with SQLite for tool executions and session summaries -

- 🔗 View Repository + 🔗 View Repository  •  📖 Docs
- ForLoop Planner - Autopilot development. Plan with ForLoop agent. Build, Test, Deploy on cloud in one go. + Froggy V2 - XP-guided multi-agent orchestration
- ForLoop offers an all-in-one platform that covers the entire development lifecycle, from initial planning and coding to automated testing and cloud deployment. -

- 🔗 View Repository -
-
- -
- Froggy - Hooks and specialized agents -
- Plugin providing Claude Code-style hooks, specialized agents, and tools like gitingest. + Multi-agent delegation and orchestration guided by XP, KISS, and YAGNI, with specialized agents, independent code review, and a persistent loop to keep work moving toward the objective.

🔗 View Repository
- Gemini Auth - Google account auth -
- Authenticate the Opencode CLI with your Google account so you can use your existing Gemini plan. -

- 🔗 View Repository -
-
- -
- GitHub Release - Automated GitHub releases -
- Create and publish GitHub releases with semantic versioning, tag management, and auto-generated release notes. -

- 🔗 View Repository -
-
- -
- Google AI Search - Query Google AI Mode (SGE) -
- An opencode plugin that exposes a native tool for querying Google AI Mode (SGE). -

- 🔗 View Repository -
-
- -
- GoopSpec - Spec-driven development workflow -
- Transforms AI-assisted coding with spec-driven workflows. Features 5-phase workflow (Plan, Research, Specify, Execute, Accept), contract gates for user confirmation, 12 specialized subagents, persistent memory system, wave-based execution with atomic commits, and deviation rules for handling unexpected situations. -

- 🔗 View Repository -
-
- -
- GPT Imagegen - gpt-image-2 in OpenCode — no API cost when using your ChatGPT subscription -
- Brings gpt-image-2 (ChatGPT Images 2) image generation to OpenCode. When you sign into OpenCode with your ChatGPT account, generations are billed against your existing Plus / Pro / Business plan — no per-image API cost. An OpenAI API key path is also planned. Supports reference images for style guidance and edits. -

- 🔗 View Repository -
-
- -
- Handoff - Session handoff prompts -
- Creates focused handoff prompts for continuing work in a new session. -

- 🔗 View Repository -
-
- -
- Harness Memory - Persistent project memory - 73 percent fewer tokens than CLAUDE.md, with human review -
- Auto-captures evidence from tool interactions and materializes memories through a multi-gate pipeline. 4-layer activation engine selects the right memories per context. Replaces CLAUDE.md with structured, searchable, reviewable project memory. Local-first (sql.js WASM), zero cloud dependency. -

- 🔗 View Repository -
-
- -
- hiai-opencode - Canonical 12-agent model with bundled skills, MCP, LSP, and ralph-loop + hiai-opencode V1 only - Canonical 12-agent model with bundled skills, MCP, LSP, and ralph-loop
Unified plugin shipping 10 visible agents (Bob, Coder, Strategist, Critic, Guard, Researcher, Designer, Manager, Brainstormer, Vision) plus hidden Sub and Agent Skills. Bundles MCP wiring (playwright, stitch, sequential-thinking, firecrawl, rag, mempalace, context7, websearch, grep_app), LSP, skill materialization, and a multi-layer continuation system (todo enforcer, ralph-loop, ULTRAWORK auto-start) in one install.

@@ -382,146 +572,34 @@ Key features:
- Honcho - AI-native long-term memory for OpenCode + Oh My Kiro V2 - AWS Kiro-inspired multi-agent SDD coding agent harness
- Give OpenCode persistent memory that survives context wipes, session restarts, and fresh chats. Honcho remembers what you're working on, durable preferences, and prior context across projects. Supports cloud and self-hosted deployments with configurable session strategies. + A spec-driven, multi-agent coding plugin for OpenCode inspired by AWS Kiro. Features requirements-first workflow, spec task execution, context gathering, background tasks, and multimodal support.

- 🔗 View Repository + 🔗 View Repository
- HTML to Markdown - Fast, lossless HTML to Markdown conversion + Oh My OpenAgent V1 only - Agents & Pre-built tools
- OpenCode plugin exposing html-to-markdown CLI tools for converting HTML to clean Markdown with metadata, tables, and document structure. + Background agents, pre-built tools (LSP/AST/MCP), curated agents, and a Claude Code compatible layer. (formerly Oh My Opencode)

- 🔗 View Repository + 🔗 View Repository
- kibi-opencode - Repo-local, branch-scoped knowledge and traceability for OpenCode -
- Plugin-first entry point into the Kibi stack for OpenCode users. It adds context-aware -guidance, routes durable code comments toward Kibi artifacts, runs non-blocking background -sync and targeted validation checks, and helps keep repo knowledge branch-local and queryable. - -

- 🔗 View Repository -
-
- -
- Kilo Gateway Auth - Kilo Gateway provider -
- Adds Kilo Gateway provider support to OpenCode. -

- 🔗 View Repository -
-
- -
- Lemma - Persistent memory layer for LLMs via MCP - local, zero-dependency, works on all clients -
- Biological memory model for AI coding agents. Features confidence decay/boost, Fuse.js fuzzy dedup, guide system with usage tracking, cross-references, cumulative backup, virtual session tracking, and universal memory injection via tool descriptions (works on Claude Desktop, Cursor, VS Code, Gemini CLI, opencode, and any MCP client). No API keys, no cloud, fully local JSONL storage. 20 MCP tools, 110 tests, MIT licensed. - -

- 🔗 View Repository -
-
- -
- liter-llm - Universal LLM API client for 143 providers -
- OpenCode plugin exposing liter-llm tools for chat, streaming, embeddings, and an OpenAI-compatible proxy across 143 providers. -

- 🔗 View Repository -
-
- -
- Magic Context - Lossless context management with background compression -
- Cache-aware context management that keeps long sessions productive. Background historian compresses old conversation into structured compartments while you keep working. Includes cross-session project memory, unified search across history/memories/facts, overnight dreamer for memory maintenance, and prompt-cache-safe deferred operations. -

- 🔗 View Repository -
-
- -
- Manage Skills - Wizard-driven skills management for OpenCode. -
- Modal-based skill install, remove, list, and update workflow that avoids ANSI prompts while wrapping the skills CLI inside OpenCode. -

- 🔗 View Repository -
-
- -
- Micode - Brainstorm-Plan-Implement workflow -
- Structured workflow with session continuity, subagent orchestration, git worktree isolation, and AST-aware tools. -

- 🔗 View Repository -
-
- -
- Model Announcer - Model self-awareness -
- Automatically injects the current model name into the chat context so the LLM is self-aware. -

- 🔗 View Repository -
-
- -
- Morph Fast Apply - 10,500+ tokens/sec code editing -
- Integrates Morph's Fast Apply API for faster code editing with lazy edit markers and unified diff output. -

- 🔗 View Repository -
-
- -
- oc-mnemoria - Persistent shared memory (hive mind) for OpenCode agents across sessions -
- Gives all OpenCode agents a shared persistent memory store where every agent can read and write. Each entry is tagged with the creating agent (plan, build, ask, review) so no context is lost between roles. Powered by the mnemoria Rust engine with hybrid BM25 + semantic search, CRC32 checksum chains, and an append-only binary format. Includes 7 tools and /mn-* slash commands. -

- 🔗 View Repository -
-
- -
- Oh My Opencode - Agents & Pre-built tools -
- Background agents, pre-built tools (LSP/AST/MCP), curated agents, and a Claude Code compatible layer. -

- 🔗 View Repository -
-
- -
- Oh My Opencode Slim - Lightweight agent orchestration with reduced token usage + Oh My Opencode Slim V2 - Lightweight agent orchestration with reduced token usage
Slimmed-down fork of oh-my-opencode focused on core agent orchestration. Features specialized sub-agents (Explorer, Oracle, Librarian, Designer, etc.), background task management, LSP/AST tools, tmux integration for live agent visibility, and MCP servers. Optimized to consume significantly fewer tokens.

- 🔗 View Repository + 🔗 View Repository  •  📖 Docs
- Omniroute Auth - Omniroute authentication provider -
- Connect and automatically fetch models from your Omniroute instance -

- 🔗 View Repository -
-
- -
- Open Conclave - Multi-agent debates, moderated by a captain agent until they reach consensus + Open Conclave V1 only - Multi-agent debates, moderated by a captain agent until they reach consensus
In the style of Grok 4.20, multiple agents are dispatched to answer the same query. Each one has a different system prompt (logical, creative, research-focused) and have to reach a consensus for the final output. The user can specify which provider/model they want to use and override the system prompt of each agent via config.

@@ -530,7 +608,7 @@ sync and targeted validation checks, and helps keep repo knowledge branch-local
- Open Dynamic Workflows - Dynamic multi-agent workflows for OpenCode — plan, orchestrate, and verify with the script as the orchestrator + Open Dynamic Workflows V1 only - Dynamic multi-agent workflows for OpenCode — plan, orchestrate, and verify with the script as the orchestrator
An MIT-licensed engine bringing Claude-Code-style dynamic workflows and ultracode to OpenCode. A local daemon runs a generated orchestration script with concurrent agents, adversarial verification, and crash-resume; the OpenCode plugin adds workflow/ultracode triggers and a planning UI. Bring your own model — Anthropic, any OpenAI-compatible endpoint, or local Ollama.

@@ -539,148 +617,48 @@ sync and targeted validation checks, and helps keep repo knowledge branch-local
- open-plan-annotator - Annotate LLM plans like a Google Doc! + OpenCode Crosstalk V2 - Peer discovery, messaging, and expiring file leases between concurrent OpenCode sessions
- A fully local agentic coding plugin that intercepts plan mode and opens an annotation UI in your browser. Select text to strikethrough, replace, insert, or comment — then approve the plan or request changes + Coordination for agents that share a workspace. Six tools let concurrent sessions +discover each other, talk to each other, and take exclusive expiring leases on the +files they are editing, so two agents never rewrite the same file at once. + +- `crosstalk_status` / `crosstalk_peers` — declare a role, goal, and working set, then list who is running, what they declared, and what they hold +- `crosstalk_send` / `crosstalk_inbox` — message a session, a role, or everyone; mail lands in the recipient's mailbox and is injected into its current turn when the session is live +- `crosstalk_claim` — atomic lease on files or named resources; a refusal names the holder and when the lease expires +- `crosstalk_wait` — block until a peer goes idle or a resource is released, instead of sleeping and re-checking + +Identity comes from the session rather than from tool input, so no session can +release another's lease or read another's mail. All six tools share one permission +action (`crosstalk`), so a project can allow or deny coordination with a single +rule. The core coordination logic (presence registry, mailboxes, claim table) is +host-free and unit tested — the plugin imports nothing from OpenCode outside its +single entry point.

- 🔗 View Repository + 🔗 View Repository
- OpenAI Codex Auth - ChatGPT Plus/Pro OAuth -
- This plugin enables opencode to use OpenAI's Codex backend via ChatGPT Plus/Pro OAuth authentication. -

- 🔗 View Repository -
-
- -
- OpenCode Adaptive Thinking - Adaptive reasoning-effort control -
- OpenCode plugin that lets agents actively adjust model reasoning effort during a session, with configurable system guidance and a tool for switching between valid reasoning-effort variants. -

- 🔗 View Repository -
-
- -
- OpenCode Agent Tmux - Real-time tmux panes for OpenCode agents with auto-launch, streaming, and cleanup. -
- Smart tmux integration for OpenCode that auto-spawns panes to stream agent output, supports flexible layouts and multi-port setups, and cleans up when sessions finish. -

- 🔗 View Repository -
-
- -
- Opencode Agents Sidebar - Browse configured OhMyOpenAgent agents in the TUI -
- OpenCode sidebar plugin that displays configured OhMyOpenAgent agents with lifecycle-based categories, collapsible sections, descriptions, and model information. -

- 🔗 View Repository -
-
- -
- Opencode Canvas - Interactive terminal canvases in tmux splits -
- Interactive terminal canvases (calendars, documents, flight booking) in tmux splits. Port of claude-canvas for OpenCode. -

- 🔗 View Repository -
-
- -
- OpenCode Chromium Browser Plugin - Browser automation for Chromium browsers with a readable extension and native host -
- OpenCode browser automation for Chromium-based browsers using a readable Manifest V3 extension, Node.js native messaging host, and OpenCode-native tools. Supports Chrome, Edge, Brave, Chromium, screenshots, CDP commands, DOM actions, downloads, console/network inspection, and controlled tab sessions. -

- 🔗 View Repository -
-
- -
- OpenCode Claude Memory - Claude Code-compatible memory -
- Share persistent Markdown memory between OpenCode and Claude Code using Claude Code-compatible paths and file formats. -

- 🔗 View Repository -
-
- -
- OpenCode Ensemble - Parallel agent teams for OpenCode + OpenCode Ensemble V2 - Parallel agent teams for OpenCode
Coordinate parallel OpenCode agents with peer messaging, a shared task board, git worktree isolation, and a live dashboard.

- 🔗 View Repository + 🔗 View Repository  •  📦 npm
- Opencode Hooks Plugin - Claude code compatible hooks + OpenCode Mesh V2 - The missing agent-to-agent messenger for OpenCode
- Use Claude code hooks definition and hook them to opencode hooks. + The free OpenCode plugin that lets your agents communicate directly with any session on your machine. Separate projects, separate terminals, separate models, one connected team.

- 🔗 View Repository + 🔗 View Repository
- Opencode Host Notify Bridge - Devcontainer notifications bridged back to the host -
- OpenCode plugin and host helper that forward permission, question, and idle notifications from devcontainers to the host machine for desktop alerts and sound. -

- 🔗 View Repository -
-
- -
- Opencode Ignore - Ignore files based on pattern -
- Plugin to ignore directory/file based on pattern. -

- 🔗 View Repository -
-
- -
- Opencode LiteLLM - Auto-discover models from a LiteLLM proxy -
- Drop-in LiteLLM provider for OpenCode with zero configuration. Auto-detects a running -LiteLLM proxy on common ports (4000, 8000, 8080), pulls every model from /v1/models, -and registers them in OpenCode automatically — no model lists to hand-maintain. Smart -name formatting, modality categorization (chat/embedding/image/audio), provider -extraction, optional API-key auth, and a 5-second timeout so a slow proxy never blocks -startup. - -

- 🔗 View Repository -
-
- -
- Opencode Log Sanitizer - Sanitizes pasted logs by redacting long strings, JWTs, bcrypt hashes, and base64 blobs -
- Sanitizes pasted logs before sending them to AI by redacting long quoted strings, JWT tokens, bcrypt hashes, and base64 blobs to reduce token usage and remove irrelevant noise. -

- 🔗 View Repository -
-
- -
- Opencode Mem - Persistent memory with vector database -
- A persistent memory system for AI coding agents that enables long-term context retention across sessions using local vector database technology. Features dual memory scopes, web interface, auto-capture system, and multi-provider AI support. -

- 🔗 View Repository -
-
- -
- OpenCode Mission Control - Command center for parallel agents — worktree isolation, DAG plans, merge train, PRs + OpenCode Mission Control V1 only - Command center for parallel agents — worktree isolation, DAG plans, merge train, PRs
Orchestrates parallel OpenCode agents in tmux-isolated git worktrees with live inspection (capture/attach/diff), a dashboard overview, agent status reporting, and in-chat notifications. Supports DAG-based plans with autopilot/copilot/supervisor modes and a merge train with test gating and automatic rollback.

@@ -689,181 +667,34 @@ startup.
- Opencode Models Discovery - Configurable model discovery and filtering without long manual config -
- OpenCode plugin for discovering models from OpenAI-compatible providers and API gateways, with provider and model filtering so users can avoid maintaining large configs or loading every model at once. -

- 🔗 View Repository -
-
- -
- Opencode Notify - Native OS notifications -
- Native OS notifications for OpenCode - know when tasks complete. -

- 🔗 View Repository -
-
- -
- OpenCode ntfy.sh - Push notifications to keep you in the know, even when you're on the go. -
- An OpenCode plugin that adds push notifications through ntfy.sh. -

- 🔗 View Repository -
-
- -
- OpenCode Plan Manager - AI-Native Implementation Planning for Modern Agentic Workflows -
- High-performance, minimalist plugin designed to bridge the gap between complex implementation strategies and autonomous execution. Selective context loading, zero-hallucination schemas, visible filesystem kanban. -

- 🔗 View Repository -
-
- -
- OpenCode Provider Alias - Alias and curate OpenCode providers with model metadata from models.dev. -
- Lets users define local OpenCode provider and model aliases hydrated from existing models.dev metadata. -

- 🔗 View Repository -
-
- -
- Opencode Quota - Quota toasts and token tracking -
- Track quota and token usage across providers via automatic toasts and slash commands. -

- 🔗 View Repository -
-
- -
- Opencode Roadmap - Strategic planning -
- Strategic roadmap planning and multi-agent coordination plugin. Provides project-wide planning capabilities. -

- 🔗 View Repository -
-
- -
- Opencode Sessions - Session management -
- Session management plugin for OpenCode with multi-agent collaboration support. -

- 🔗 View Repository -
-
- -
- Opencode Snippets - Instant inline text expansion -
- Instant inline text expansion for OpenCode. Type #snippet anywhere in your message and watch it transform. Brings DRY principles to prompt engineering with composable, shell-enabled snippets. -

- 🔗 View Repository -
-
- -
- OpenCode Swarm - Verification-gated swarm with architect, review, test, and security agents + OpenCode Swarm V2 - Verification-gated swarm with architect, review, test, and security agents
Verification-gated OpenCode swarm with architect planning, independent review, test engineering, security checks, and resumable evidence.

- 🔗 View Repository + 🔗 View Repository
- Opencode Synced - Sync configs across machines + OpenCode TasksMD V1 only - Background task queue for OpenCode projects, powered by TASKS.md
- Enables syncing global opencode configurations across machines with public/private visibility options. + Background task queue that reads TASKS.md — schedules recurring work, sets per-task permissions and agents, and persists state across restarts.

- 🔗 View Repository + 🔗 View Repository  •  📦 npm
- Opencode Telemetry - Passive cross-session telemetry to local SQLite; cost rollups across agent orchestration chains + OpenCode Teamwork V2 - Antigravity-style multi-agent orchestration with verification loops
- Logs every opencode session to a local SQLite database automatically — tokens, tool calls, skills, per-turn cost. Aggregates costs across orchestration chains (conductor + child sessions), offers turn-by-turn forensic inspection, and ships an `octm` CLI for reports without spending model tokens. Zero cloud, zero network, no message bodies stored. + Brings the Antigravity-style Teamwork orchestration model to OpenCode V2, where a Sentinel coordinator dispatches a DAG of specialist agents and a verifier gates every task until it passes. Ships 10 agents (Sentinel, Orchestrator, Crafter, Scout, Worker, Proof Worker, Proposer, Falsifier, Synthesizer, Verifier), 7 slash commands, per-agent git worktrees, cost tracking, and a 9-step prompt-crafting wizard.

- 🔗 View Repository + 🔗 View Repository  •  📦 npm
- OpenCode Throughput - Real-time LLM performance monitoring -
- Real-time LLM performance monitoring plugin for OpenCode. Tracks TTFT, TPS, latency, token usage, and cost per model with toast notifications and a TUI sidebar display. -

- 🔗 View Repository -
-
- -
- OpenCode Token Tracker - Real-time token usage, cost, and latency tracking for every AI request in OpenCode -
- Displays a toast after each AI response with input/output tokens, cache hits, reasoning tokens, response latency, per-message cost, cumulative session cost, model identifier, and request count. Automatically aggregates tokens from subagent sessions spawned via the Task tool. Zero config — drop the file in and it works. -

- 🔗 View Repository -
-
- -
- Opencode TTS - Voice summaries for idle responses -
- Speaks assistant responses aloud when a session goes idle, with summary or full-text modes and local TTS backends. -

- 🔗 View Repository -
-
- -
- Opencode update notifier - Notify about plugin updates. -
- Checks if your pinned plugins have newer versions available and shows a notification. -

- 🔗 View Repository -
-
- -
- Opencode Usage Monitor - Monitor OpenAI and Z.AI usage quotas in the TUI -
- OpenCode sidebar plugin that displays API usage quotas for OpenAI and Z.AI providers with per-model breakdowns, spend tracking, and configurable refresh controls. -

- 🔗 View Repository -
-
- -
- Opencode Visualizer - 2D pixel-art office for AI agents -
- Turning raw OpenCode terminal logs into cozy 2D pixel office chaos. Watch your agents work, idle, and celebrate success in a bustling virtual office. -

- 🔗 View Repository -
-
- -
- OpenCode Workaholic - Enforce mandatory working time and prevents premature "done" responses -
- - AI has an early-exit problem: it says "done" at 30 seconds while edge cases are untested, bugs remain, and docs are missing. -- Workaholic enforces mandatory working time for AI until the timer hits zero. -- Blocks premature "done" responses until timer expire, and require AI to call checkout() to end the task. - -

- 🔗 View Repository -
-
- -
- Opencode Workspace - Multi-agent orchestration + Opencode Workspace V1 only - Multi-agent orchestration
Bundled multi-agent orchestration harness with 16 components in one install.

@@ -872,283 +703,70 @@ startup.
- Opencode Worktree - Zero-friction git worktrees + opencode-background-tasks V2 - A sidebar list of the background shells and subagents still running in an OpenCode v2 session
- Zero-friction git worktrees for OpenCode. Auto-spawns terminals, syncs files, cleans up on exit. + Adds a Background list to the OpenCode v2 session sidebar with every shell and subagent sent to the background, a live timer on each, and a done or failed mark when it ends.

- 🔗 View Repository + 🔗 View Repository
- opencode-ascii - Strip unicode characters from output and replace them by their ASCII equivalents + opencode-workflows V2 - Claude Code-style dynamic workflows for opencode v2 — a JS script fans work out to parallel subagents
- Substitute unicode characters for ASCII. Em-dash (—) and en-dash (–) for hyphens (-); right arrow (→) for (->) and so on. + A native opencode v2 plugin that reproduces Claude Code's dynamic workflows. The model writes a small JavaScript orchestration script (agent, parallel, pipeline, phase, budget, nested workflows) that runs in a sandboxed interpreter in the background, fans work out to subagents as child sessions, and can resume from its journal. Includes a live TUI tree to watch, steer, or stop running agents. Uses your configured opencode models; no extra daemon.

- 🔗 View Repository + 🔗 View Repository  •  📦 npm
- opencode-bmad-workflow - BMAD workflow plugin — automates epic, feature, sprint and code review workflows using specialized AI agents + Orchestrator V2 - Cost-aware subagent routing skill plus injected orchestration instructions
- Brings the BMAD (Breakthrough Method of Agile AI-Driven Development) methodology to OpenCode. Provides specialized agents for product management, architecture, development, and QA roles. Automates epic planning, feature breakdown, sprint workflows, and code reviews through a structured multi-agent pipeline. + Teaches the primary agent to route work to the right subagent tier: an `orchestrator` skill with routing rules, prompt templates and an escalation ladder; routing rules injected into primary sessions; subagent conduct rules injected into child sessions; and example agent-tier definitions.

- 🔗 View Repository + 🔗 View Repository
- opencode-mystatus - Check AI subscription quotas -
- Check all your AI subscription quotas in one command. Supports OpenAI (Plus/Pro/Codex, etc.), Zhipu AI, Google Antigravity, and more. -

- 🔗 View Repository -
-
- -
- opencode-personality - A configurable personality and mood system plugin for OpenCode. -
- Give your AI assistant a distinct personality with customizable moods that drift over time. -

- 🔗 View Repository -
-
- -
- opencode-plugin-otel - OpenTelemetry telemetry exporter for opencode sessions, mirroring Claude Code monitoring signals -
- Exports metrics, logs, and traces from opencode sessions via OTLP/gRPC to any OpenTelemetry-compatible backend (Datadog, Honeycomb, Grafana Cloud, etc.). Instruments session lifecycle, token usage, cost, tool durations, and git commits — mirroring the same signals as Claude Code's monitoring. -

- 🔗 View Repository -
-
- -
- opencode-review - Automatic structured code review with configurable dimensions and auto-fix -
- An automatic code review plugin for OpenCode CLI. Reviews staged changes when session goes idle, with configurable cooldown, multi-dimension analysis (code quality, security, performance, testing, documentation), severity levels, and auto-fix chain support. -

- 🔗 View Repository -
-
- -
- opencode-short-term-memory - Maintain user instructions and preferences throughout long sessions. No more repeating yourself. -
- Automatically summarizes conversation context into structured session memory and injects it back into the system prompt every few turns — preserving user instructions, project context, decisions, and active references across long chats and compactions. -

- 🔗 View Repository -
-
- -
- opencode-snip - OpenCode plugin that prefixes shell commands with snip to reduce LLM token consumption by 60-90% -
- Automatically prefixes supported shell commands (git, go, cargo, npm, docker, etc.) with snip to filter output before it reaches your LLM context window. -

- 🔗 View Repository -
-
- -
- OpenCodeRAG - Local-first RAG plugin for semantic code search with tree-sitter chunking and LanceDB -
- A local-first Retrieval-Augmented Generation plugin for OpenCode that enables semantic code -search across your workspace. Features AST-aware chunking via tree-sitter (19 languages), -incremental indexing with file-change detection, watch mode for live re-indexing, and -configurable embeddings via Ollama (default) or OpenAI. Includes a CLI (index, query, status, -clear) and an OpenCode plugin with a chunk retrieval tool + automatic chat.message file -suggestions. All processing stays local by default — no data leaves the machine. - -

- 🔗 View Repository -
-
- -
- OpenHax Codex - OAuth authentication -
- OAuth authentication plugin for personal coding assistance with ChatGPT Plus/Pro subscriptions. -

- 🔗 View Repository -
-
- -
- Openskills - Alternative skills manager -
- Alternative skills management plugin for opencode with enhanced features. -

- 🔗 View Repository -
-
- -
- OpenSpec - Add Architecture planning and specification agent for OpenSpec -
- An OpenCode plugin that integrates OpenSpec, providing a dedicated agent for planning and specifying software architecture. -

- 🔗 View Repository -
-
- -
- Optimal Model Temps - Optimal sampling temperatures -
- Minimal plugin that nudges specific models to their preferred sampling temperature. -

- 🔗 View Repository -
-
- -
- OrgX OpenCode Plugin - OrgX Work Graph peer for task dispatch, receipts, deviations, and passive reconciliation + OrgX OpenCode Plugin V1 only - OrgX Work Graph peer for task dispatch, receipts, deviations, and passive reconciliation
OrgX OpenCode Plugin connects OpenCode sessions to the OrgX execution control plane. It receives OrgX task dispatches, drives the user's local OpenCode session, posts execution receipts and deviations back to OrgX, and writes compact Work Graph events for later audit-first reconciliation.

- 🔗 View Repository + 🔗 View Repository  •  📖 Docs
- Pilot - Automation daemon + Pocket Universe V1 only - A subagent driven pocket universe for your primary agent
- Automation daemon that polls for work from GitHub issues and Linear tickets. -

- 🔗 View Repository -
-
- -
- Plannotator - Interactive plan review UI -
- Plan review UI with visual annotation, private/offline sharing, and Obsidian/Bear integration. -

- 🔗 View Repository -
-
- -
- Plugin Template - CICD setup for plugins -
- Focuses on providing the CICD setup with generator script, release please, bun publish, npm trusted publishing, and mise tasks. -

- 🔗 View Repository -
-
- -
- Pocket Universe - A subagent driven pocket universe for your primary agent -
- Async agents can be powerful, but orchestration is at best finicky; they fire and forget, orphan work, lose context, waste time... and tokens. This plugin extends the native opencode subagent paradigm to provide closed loop, resilient, async agents, blocking main thread execution. A "pocket universe". This ships with three tools creating a robust system for parallel subagents to communicate and coordinate work + Async agents can be powerful, but orchestration is at best finicky; they fire and forget, orphan work, lose context, waste time... and tokens. This plugin extends the native opencode subagent paradigm to provide closed loop, resilient, async agents, blocking main thread execution. A "pocket universe". This ships with three tools creating a robust system for parallel subagents to communicate and coordinate work

🔗 View Repository
- PR Auto-Signature - Automatically adds AI model signature to PRs, Issues, and Commits + Sortie-dogs V2 - Agents write only the files they declared — manifest-gated orchestration loop
- Plugin that automatically appends AI model signature to Pull Requests, Issues, and git commit messages. Supports GitHub MCP tools, git CLI, and gh CLI. Recognizes 90+ AI models including Claude, GPT, Gemini, DeepSeek, Llama, Mistral, and more. + An opt-in OpenCode orchestration plugin. Every task starts with an explicit write manifest; edits and handoffs outside that scope are rejected. Three bounded scouts investigate read-only, a dedicated worker implements, and canonical validation plus risk-based review gate coordinator-owned completion. Dormant until you run /sortie — ordinary OpenCode sessions are untouched.

- 🔗 View Repository + 🔗 View Repository
- Ralph Wiggum - Self-correcting agent loops + Subagent Reporter V1 only - See exactly what your subagents are up to (in the terminal) when invoked during an `opencode run _____` session.
- Iterative AI development loops with self-correcting agents based on the Ralph Wiggum technique. -

- 🔗 View Repository -
-
- -
- Research Papers - Search arXiv and OpenAlex for research papers with recency and citation filtering -
- OpenCode plugin that adds a research_papers tool for searching scholarly literature. Uses arXiv for fresh preprints and OpenAlex for broader metadata, citation counts, and open-access links. Supports filtering by latest, trending, or top-cited papers. -

- 🔗 View Repository -
-
- -
- Ring a Bell Example - Simple terminal bell plugin -
- A simple plugin to ring the terminal bell once a request is complete. -

- 🔗 View Gist -
-
- -
- Semantic Anchors - Runtime contract enforcement for safe, traceable AI agents -
- Runtime steering plugin that enforces behavioral contracts via plugin hooks. Monitors chat messages and tool calls against configurable rules, supports BLOCK/WARN modes, built-in profiles (socratic, architecture), step confirmation intervals, override mechanism, dynamic role switching, and Zod-validated YAML configuration. -

- 🔗 View Repository -
-
- -
- Shell Strategy - Avoid interactive shell hangs -
- Instructions file that teaches LLMs how to avoid interactive shell commands that hang in non-TTY environments. -

- 🔗 View Repository -
-
- -
- Simple Memory - Git-based memory -
- Simple plugin to manage memory inside a git repo that can be committed and reviewed by team members. -

- 🔗 View Repository -
-
- -
- Simple Notify - Native desktop notifications with near-zero dependencies -
- Lightweight desktop notification plugin for OpenCode. Sends native OS notifications via dbus (Linux) and osascript (macOS) when sessions complete, error, need approval, or wait for input. Shows project name, elapsed time, and message preview. -

- 🔗 View Repository -
-
- -
- Smart Title - Auto-generate session titles -
- Auto-generates meaningful session titles using AI. -

- 🔗 View Repository -
-
- -
- Smart Voice Notify - Intelligent voice notifications -
- Smart voice notification plugin with multiple TTS engines (ElevenLabs, Edge TTS, SAPI) and intelligent reminder system. -

- 🔗 View Repository -
-
- -
- Subagent Reporter - See exactly what your subagents are up to (in the terminal) when invoked during an `opencode run _____` session. -
- When opencode run is invoked normally, the actions of the primary agent are visible in the terminal, but subagent actions are not. This makes it difficult to follow progress on the prompt, and makes it very difficult to use `opencode run` as part of an unattended process or script. This plugin pipes subagent actions/events directly to stdout, prefixes them with the subagents name, and enumerates subagents when run in parallel for easy identification. This allows the user to follow along in realtime when subagents are running, and effectively trace execution at a later time. + When opencode run <prompt> is invoked normally, the actions of the primary agent are visible in the terminal, but subagent actions are not. This makes it difficult to follow progress on the prompt, and makes it very difficult to use `opencode run` as part of an unattended process or script. This plugin pipes subagent actions/events directly to stdout, prefixes them with the subagents name, and enumerates subagents when run in parallel for easy identification. This allows the user to follow along in realtime when subagents are running, and effectively trace execution at a later time.

🔗 View Repository
- Subtask2 - Orchestration system + Subtask2 V1 only - Orchestration system
Extend opencode /commands into a powerful orchestration system with granular flow control.

@@ -1157,25 +775,614 @@ suggestions. All processing stays local by default — no data leaves the machin
- Swarm Plugin - Swarm intelligence + Swarm Plugin V2 - Swarm intelligence
Swarm plugin for opencode enabling swarm-based agent coordination.

- 🔗 View Repository + 🔗 View Repository
- System Prompt Logger - System prompt logger + telepathy V2 - OpenCode sessions message Claude Code, Codex, Gemini CLI and other agent sessions on the same machine
- OpenCode plugin that intercepts the system prompt before it's sent to the LLM and logs it. + Adds telepathy_list_peers, telepathy_send_message and telepathy_read_messages as native OpenCode tools, so an OpenCode session can find and message the Claude Code, Codex, Gemini CLI, Copilot CLI, Cursor and other agent sessions running on the same machine. The plugin runs inside OpenCode and starts a turn in an idle session when a message arrives, so agents can coordinate without polling. Everything stays local (messages are JSON files in ~/.telepathy, with no network calls and no telemetry). MIT licensed.

- 🔗 View Repository + 🔗 View Repository +
+
+ +
+ +

Workflows & Planning (25)

+ +
+ Agent Loop V2 - Goal-oriented agent loop that nudges agents toward objectives +
+ Iteratively drives agents toward configurable objectives with turn/time budgets, marker/regex-based termination conditions, idle detection, and a /loop slash command for manual control. +

+ 🔗 View Repository
- Token Monitor - Token analysis & cost tracking with budgets, trends, and per-project analytics + BRHP V1 only - Persistent planning state +
+ Structured, persistent planning for OpenCode with local session state, /brhp commands, bounded planner history, and a TUI sidebar. +

+ 🔗 View Repository +
+
+ +
+ ForLoop Planner V1 only - Autopilot development. Plan with ForLoop agent. Build, Test, Deploy on cloud in one go. +
+ ForLoop offers an all-in-one platform that covers the entire development lifecycle, from initial planning and coding to automated testing and cloud deployment. +

+ 🔗 View Repository +
+
+ +
+ Goal V2 - Persistent /goal mode that keeps a session working across turns +
+ A port of OpenAI Codex's /goal for OpenCode v2. Registers a /goal command plus create_goal/get_goal/update_goal tools. The session keeps re-prompting itself until the objective is complete, with token budgets, completion audits, and a bundled goal skill. +

+ 🔗 View Repository +
+
+ +
+ Godmode V2 - Discipline layer: measure → modify → verify → keep/revert +
+ Skill plugin with 135 skills and 7 subagents that adds a measure → modify → verify → keep/revert discipline loop to AI coding agents. Works with OpenCode alongside Claude Code, Codex, Cursor, and Gemini CLI. +

+ 🔗 View Repository +
+
+ +
+ GoopSpec V2 - Spec-driven development workflow +
+ Transforms AI-assisted coding with spec-driven workflows. Features 5-phase workflow (Plan, Research, Specify, Execute, Accept), contract gates for user confirmation, 12 specialized subagents, persistent memory system, wave-based execution with atomic commits, and deviation rules for handling unexpected situations. +

+ 🔗 View Repository +
+
+ +
+ Idea Inbox V2 - Capture stray thoughts into a sidebar backlog, then dispatch them to agents without derailing your session +
+ A persistent idea backlog for the opencode v2 TUI. Mid-conversation, press leader+z (or run /idea) to park a thought in the Idea Inbox sidebar without leaving your current task — no notes app, no derailing the agent. When you have a free moment, press leader+i and pick a pending idea: a delegation mission lands in your current session and execution starts immediately, while the sidebar status flips from parked to running to done as the agent works. Agents can manage the backlog themselves through idea_add/idea_list/ idea_update/idea_start tools, and a "documented" status archives an idea after its result is written up. Storage is per-worktree SQLite, so the backlog survives restarts. Ships for opencode v2 (this entry) and as a legacy v1 line: opencode-idea-inbox@legacy-v1. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ keep-going V1 only - Sends an idle session back to work when a reviewer model judges the request unfinished +
+ When a session goes idle, a reviewer model reads the owner's request and the last assistant message and answers CONTINUE or STOP; on CONTINUE the plugin sends a short fixed nudge such as "Keep going." as the next message. It stops for work that is done, blocked, or waiting on the owner's consent or answer, caps continuations per turn, and fails open on any error. Install with `npx github:ferdousbhai/keep-going --opencode`. +

+ 🔗 View Repository +
+
+ +
+ Littlepowers V1 only - Proportional planning, recovery, and phase review gates for consequential work +
+ A proportional planning, recovery, and engineering-discipline protocol. Scales planning depth to risk (direct, compact shape, or full brainstorm → spec → design → plan), pauses for review at each phase gate, recovers the last checkpoint after interruptions, and mirrors task checklists to OpenCode's native todo surface. Registers its skills directory through the config hook and injects read-only recovery context through the message-transform hook; the same implementation also ships for Codex, Claude Code, and Qoder. +

+ 🔗 View Repository +
+
+ +
+ Micode V1 only - Brainstorm-Plan-Implement workflow +
+ Structured workflow with session continuity, subagent orchestration, git worktree isolation, and AST-aware tools. +

+ 🔗 View Repository +
+
+ +
+ Neuralyzer V1 only - Easier Ralph loop inside harness +
+ Allow agent to wipe its own session context and re-run the first message. This allows easier and more ergonomic Ralph loop engineering. +

+ 🔗 View Repository +
+
+ +
+ open-plan-annotator V2 - Annotate LLM plans like a Google Doc! +
+ A fully local agentic coding plugin that intercepts plan mode and opens an annotation UI in your browser. Select text to strikethrough, replace, insert, or comment — then approve the plan or request changes +

+ 🔗 View Repository +
+
+ +
+ OpenCode Chat Workflow Setup V2 - Configure chat workflows and reusable templates before skills run +
+ Adds /setup-chat-workflows, /start-session, and /workflow-template commands. Workflows collect context, scope, gates, review modes, and reusable template choices before handing off to skills or actions. +

+ 🔗 View Repository +
+
+ +
+ Opencode Hooks Plugin V1 only - Claude code compatible hooks +
+ Use Claude code hooks definition and hook them to opencode hooks. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Plan Manager V1 only - AI-Native Implementation Planning for Modern Agentic Workflows +
+ High-performance, minimalist plugin designed to bridge the gap between complex implementation strategies and autonomous execution. Selective context loading, zero-hallucination schemas, visible filesystem kanban. +

+ 🔗 View Repository +
+
+ +
+ Opencode Roadmap V1 only - Strategic planning +
+ Strategic roadmap planning and multi-agent coordination plugin. Provides project-wide planning capabilities. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Scratchpad V2 - A private per-project scratchpad you can capture and edit without leaving the TUI +
+ One plain-Markdown scratchpad per project, keyed by absolute path. Append a line with `/scratch <text>` or open a modal editor with `/scratch`; the session sidebar shows a collapsible, read-only preview that refreshes on save. Notes live under `$OPENCODE_DATA_DIR/scratchpad` and are never written into your repo. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Todo Supervisor V2 - Session todo lists, plus a supervisor that keeps nudging idle sessions until the list is done +
+ Gives every OpenCode V2 session a real todo list and then keeps the agent working on it. Ships todo_write, todo_read, todo_add and todo_remove tools (V2 ships none), stored per session with stable per-item ids, with a live progress strip in the composer. A supervisor re-prompts any session that goes idle while its list still has open items, and stays quiet while the agent is actually working, including during tool calls, subagent runs and background shells. Any markdown file can be subscribed so its GFM checklists count as todos, and the TUI panel can tick them off by hand. Nudges are delivered as synthetic session input, so the model reads them as ordinary instructions. Tested against 2.0.24. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ OpenCode Workaholic V1 only - Enforce mandatory working time and prevents premature "done" responses +
+ - AI has an early-exit problem: it says "done" at 30 seconds while edge cases are untested, bugs remain, and docs are missing. +- Workaholic enforces mandatory working time for AI until the timer hits zero. +- Blocks premature "done" responses until timer expire, and require AI to call checkout() to end the task. +

+ 🔗 View Repository +
+
+ +
+ opencode-bmad-workflow V1 only - BMAD workflow plugin — automates epic, feature, sprint and code review workflows using specialized AI agents +
+ Brings the BMAD (Breakthrough Method of Agile AI-Driven Development) methodology to OpenCode. Provides specialized agents for product management, architecture, development, and QA roles. Automates epic planning, feature breakdown, sprint workflows, and code reviews through a structured multi-agent pipeline. +

+ 🔗 View Repository +
+
+ +
+ OpenSpec V1 only - Add Architecture planning and specification agent for OpenSpec +
+ An OpenCode plugin that integrates OpenSpec, providing a dedicated agent for planning and specifying software architecture. +

+ 🔗 View Repository +
+
+ +
+ Plannotator V1 only - Interactive plan review UI +
+ Plan review UI with visual annotation, private/offline sharing, and Obsidian/Bear integration. +

+ 🔗 View Repository +
+
+ +
+ Ralph Wiggum unverified - Self-correcting agent loops +
+ Iterative AI development loops with self-correcting agents based on the Ralph Wiggum technique. +

+ 🔗 View Repository +
+
+ +
+ Superpowers V2 - Complete software development methodology with composable skills for coding agents +
+ Gives your coding agent a structured methodology - brainstorm specs, write plans, run TDD, dispatch subagents, and review work. Skills trigger automatically across Claude Code, OpenCode, Codex, Gemini CLI, Cursor, and GitHub Copilot CLI. +

+ 🔗 View Repository +
+
+ +
+ Todolist V2 - Restores todowrite/todoread with a sidebar todo strip +
+ Brings back the V1 session todo tools as a server plugin. Lists are stored per session and a compact summary of open tasks is injected into the model context on every request, so the agent keeps track across long conversations and context compaction. +

+ 🔗 View Repository +
+
+ +
+ +

Providers, Auth & Routing (26)

+ +
+ Antigravity Auth V1 only - Google Antigravity models +
+ Use Gemini and Anthropic models for free via Google Antigravity IDE authentication. +

+ 🔗 View Repository +
+
+ +
+ Antigravity Multi-Auth V1 only - Multiple Google accounts +
+ Fork of opencode-antigravity-auth that allows using multiple Google accounts with automatic rotation when rate limited. +

+ 🔗 View Repository +
+
+ +
+ Claude Code Switch (CCS) OpenCode Sync V1 only - Claude Code Switch (CCS) to OpenCode sync +
+ An OpenCode plugin that reads your Claude Code Switch (CCS) configuration and automatically syncs the providers into your OpenCode config. +

+ 🔗 View Repository +
+
+ +
+ Esuyo Custom Provider V2 - Auto-discover models from any OpenAI-compatible gateway on startup +
+ Opencode plugin that syncs /v1/models from any OpenAI-compatible gateway into providers. Global ~/.config/opencode or project .opencode config, {env:} / {file:} secrets, include/exclude regex, and zero manual model maintenance. +

+ 🔗 View Repository +
+
+ +
+ Free Models Router V2 - Free model discovery, prompt routing, and seamless quota fallback +
+ Discovers free models from OpenRouter and models.dev, routes each prompt to the best free candidate by capability and score, and falls back to the next free model on rate limits, quota exhaustion, or 5xx errors. Ships cycle/stop/retry-last/wait fallback modes, cooldowns, configurable backoff, an optional circuit breaker, status/refresh/select tools, an RPC API, and an optional TUI plugin for toast notifications. +

+ 🔗 View Repository +
+
+ +
+ Gemini Auth V2 - Google account auth +
+ Authenticate the Opencode CLI with your Google account so you can use your existing Gemini plan. +

+ 🔗 View Repository +
+
+ +
+ Kilo Gateway Auth V1 only - Kilo Gateway provider +
+ Adds Kilo Gateway provider support to OpenCode. +

+ 🔗 View Repository +
+
+ +
+ liter-llm V2 - Universal LLM API client for 143 providers +
+ OpenCode plugin exposing liter-llm tools for chat, streaming, embeddings, and an OpenAI-compatible proxy across 143 providers. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ LM Studio Warm V1 only - Ensures your LM Studio model is loaded before every request +
+ Guarantees the target LM Studio model is loaded and addressable before any request leaves opencode, healing cold starts, "no model loaded" errors, and mid-session idle-TTL evictions. +

+ 🔗 View Repository +
+
+ +
+ Muse Auth V2 - Muse Spark billed to subscription +
+ Use Muse Spark in opencode billed to the Muse Code monthly subscription via Meta device login instead of API billing. +

+ 🔗 View Repository +
+
+ +
+ Omniroute Auth V1 only - Omniroute authentication provider +
+ Connect and automatically fetch models from your Omniroute instance +

+ 🔗 View Repository +
+
+ +
+ OpenAI Codex Auth V1 only - ChatGPT Plus/Pro OAuth +
+ This plugin enables opencode to use OpenAI's Codex backend via ChatGPT Plus/Pro OAuth authentication. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Adaptive Thinking V1 only - Adaptive reasoning-effort control +
+ OpenCode plugin that lets agents actively adjust model reasoning effort during a session, with configurable system guidance and a tool for switching between valid reasoning-effort variants. +

+ 🔗 View Repository +
+
+ +
+ Opencode CMD Provider V2 - Use CommandCode plans (Go, GOAT, Pro, Max) as an OpenCode provider. +
+ OpenCode provider plugin for the CommandCode Provider API. Authenticate via +/connect browser flow or COMMANDCODE_API_KEY, auto-registers all CommandCode +models ([CMD] prefix) with offline snapshot, pricing display, and per-plan +deals/allowance intelligence in the sidebar and cmd_plan_summary tool. +

+ 🔗 View Repository +
+
+ +
+ Opencode LiteLLM V2 - Auto-discover models from a LiteLLM proxy +
+ Drop-in LiteLLM provider for OpenCode with zero configuration. Auto-detects a running +LiteLLM proxy on common ports (4000, 8000, 8080), pulls every model from /v1/models, +and registers them in OpenCode automatically — no model lists to hand-maintain. Smart +name formatting, modality categorization (chat/embedding/image/audio), provider +extraction, optional API-key auth, and a 5-second timeout so a slow proxy never blocks +startup. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Model Alias V2 - Portable model aliases with variants and chains — one config entry, per-machine remapping +
+ Define short model aliases (cheap, smart, reviewer...) in a central alias file and reference them in any agent or command model field. Each machine maps aliases to whatever provider/model it prefers, so shared agent and command configs stay portable across machines and providers. Supports model variants, alias chains (stable role names layered on machine-specific mappings), and a /alias command for managing aliases in-session. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Model Aliases V2 - Provider-scoped aliases for the newest eligible OpenCode models +
+ Create stable model IDs within a provider using glob, capability, and context filters. On catalog refresh, each alias resolves to the newest eligible model already in OpenCode's catalog. +

+ 🔗 View Repository +
+
+ +
+ Opencode Models Discovery V2 - Configurable model discovery and filtering without long manual config +
+ OpenCode plugin for discovering models from OpenAI-compatible providers and API gateways, with provider and model filtering so users can avoid maintaining large configs or loading every model at once. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Provider Alias V1 only - Alias and curate OpenCode providers with model metadata from models.dev. +
+ Lets users define local OpenCode provider and model aliases hydrated from existing models.dev metadata. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Provider Guard V2 - Restrict available providers by project directory +
+ An OpenCode V2 plugin that lets you choose which providers are available in +each project, so you can keep personal or pay-as-you-go providers out of +selected projects. +

+ 🔗 View Repository +
+
+ +
+ opencode-go-whoami V2 - Display local email labels for OpenCode Go/Zen accounts +
+ Identify your OpenCode Go/Zen accounts through user-assigned email labels, a permanent sidebar panel, and /go-whoami. Runs locally and displays only masked keys and fingerprints. +

+ 🔗 View Repository +
+
+ +
+ opencode-llm-proxy V1 only - OpenCode-backed API gateway with tool calling +
+ Local OpenCode plugin that exposes OpenAI Chat Completions, OpenAI Responses, Anthropic Messages, and Gemini-compatible endpoints for any model configured in OpenCode. Supports streaming, model listing, and real tool/function calling including parallel tool calls, so tools like n8n, Open WebUI, LangChain, Continue, Zed, and coding agents can reuse the same OpenCode model setup. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ OpenHax Codex V1 only - OAuth authentication +
+ OAuth authentication plugin for personal coding assistance with ChatGPT Plus/Pro subscriptions. +

+ 🔗 View Repository +
+
+ +
+ Optimal Model Temps V1 only - Optimal sampling temperatures +
+ Minimal plugin that nudges specific models to their preferred sampling temperature. +

+ 🔗 View Repository +
+
+ +
+ Qoder Bridge for OpenCode V2 - Use Qoder AI models in OpenCode via the official Qoder Agent SDK, with tools, MCP, sessions, and quota tracking. +
+ OpenCode plugin that integrates Qoder AI models through the official Qoder Agent SDK. Provides dynamic model discovery, streaming, tool calling, MCP integration, multimodal input, persistent sessions, live quota visibility, and usage tracking. +

+ 🔗 View Repository +
+
+ +
+ Rehydra V2 - Prevent your coding agent from leaking secrets to LLM providers +
+ Intercepts the conversation between OpenCode and the LLM, replacing secrets from .env files and detected API keys, tokens, and credentials with placeholders before they leave your machine. Secrets are transparently restored before any tool executes locally. Supports pattern-based detection for Stripe, OpenAI, AWS, GitHub, Slack, and more. +

+ 🔗 View Repository +
+
+ +
+ +

Cost & Usage (13)

+ +
+ Cost Details V2 - Shows current and previous turn cost in the sidebar Context section +
+ OpenCode TUI plugin that shows how much the current and previous prompt turns cost, right in the sidebar Context section next to the token count. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ DeepSeek Peak V2 - DeepSeek peak/off-peak pricing, Chinese holidays included +
+ Shows whether DeepSeek is in its peak or off-peak pricing window. Applies the official rule including Chinese public holidays, treats a response pricing header as the source of truth and flags mismatches, adds a compact next-change time (local or UTC, with weekday) in a single non-wrapping sidebar line, works before the first request via a preview marker, and speaks English, Portuguese, Chinese, Japanese, and Korean. Supports OpenCode V2 and V1. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Multi-Usage V2 - One OpenCode plugin for multiple AI subscription quotas +
+ An easily extensible OpenCode plugin for tracking AI subscription quotas. Add provider integrations with minimal effort; each is opt-in, with support for ChatGPT Codex, OpenCode Go, CommandCode and more. +

+ 🔗 View Repository +
+
+ +
+ Opencode Quota V2 - Quota toasts and token tracking +
+ Track quota and token usage across providers via automatic toasts and slash commands. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Session Cost V2 - Sidebar block showing true session cost including all subagents +
+ Subagent costs hide from you by default in OpenCode's session cost display. +This TUI plugin adds a sidebar block showing your true total — the active +session plus every subagent (task) it spawned — and lets you expand it to +see the cost of each one individually. Works for every session regardless +of model or provider, no configuration required. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Token Tracker V1 only - Real-time token usage, cost, and latency tracking for every AI request in OpenCode +
+ Displays a toast after each AI response with input/output tokens, cache hits, reasoning tokens, response latency, per-message cost, cumulative session cost, model identifier, and request count. Automatically aggregates tokens from subagent sessions spawned via the Task tool. Zero config — drop the file in and it works. +

+ 🔗 View Repository +
+
+ +
+ Opencode Usage Bar V2 - Lightweight, configurable usage gauge with provider status alerts for the OpenCode TUI. +
+ A minimal usage bar that shows how much of your coding-plan quota you've used and how long until it resets, in a full-width row below the session footer. Supports Claude Pro/Max and ChatGPT Plus/Pro (Codex), each toggleable per window (5h session, 7d weekly, per-model) via a simple TOML config, so you show only the bars you care about. Color-coded mini-bars escalate green/amber/red with usage, countdowns tick live, and last known values are cached so the bar appears instantly on restart. It also watches each vendor's public status page and prepends a color-coded "!" marker when there's an active incident — so you know it's them, not you. No slash commands, no sidebar, no token bookkeeping, just a lightweight always-visible gauge. Credentials are read-only from the vendors' own CLI logins or OpenCode's auth store. Installable via npm (@satas/opencode-usage-bar). +

+ 🔗 View Repository +
+
+ +
+ Opencode Usage Monitor V1 only - Monitor OpenAI and Z.AI usage quotas in the TUI +
+ OpenCode sidebar plugin that displays API usage quotas for OpenAI and Z.AI providers with per-model breakdowns, spend tracking, and configurable refresh controls. +

+ 🔗 View Repository +
+
+ +
+ opencode-mystatus V1 only - Check AI subscription quotas +
+ Check all your AI subscription quotas in one command. Supports OpenAI (Plus/Pro/Codex, etc.), Zhipu AI, Google Antigravity, and more. +

+ 🔗 View Repository +
+
+ +
+ Quota Board V2 - Provider quotas, reset countdowns, and credit balances in the OpenCode V2 terminal +
+ V2-native quota sidebar and /quota popup using existing active provider connections. Displays remaining allowances, reset countdowns, and credit balances, with collapsible providers, persistent visibility and pinning preferences, and stale-value retention after failed refreshes. Includes adapters for OpenAI, Anthropic, OpenCode Console, OpenRouter, Z.AI, Synthetic, and MiniMax. +

+ 🔗 View Repository +
+
+ +
+ Sidebar Usage V2 - TUI sidebar showing per-turn and session-cumulative token usage, cache hit rate, and cost +
+ Adds a collapsible "Usage" block to the opencode TUI sidebar showing token +breakdown (input, output, reasoning, cache read, cache write), cache hit +percentage, context window usage, and session cost. Updates reactively as +new assistant messages arrive. +

+ 🔗 View Repository +
+
+ +
+ Token Monitor V1 only - Token analysis & cost tracking with budgets, trends, and per-project analytics
Track token usage (input/output/reasoning/cache), estimate costs, view daily trends with ASCII charts, set budget alerts, and export data. Supports per-agent breakdown, agent×model cross-analysis, and project-scoped analytics.

@@ -1184,7 +1391,7 @@ suggestions. All processing stays local by default — no data leaves the machin
- Tokenscope - Token analysis & cost tracking + Tokenscope V1 only - Token analysis & cost tracking
Tokenscope, Comprehensive token usage analysis and cost tracking for opencode sessions.

@@ -1192,35 +1399,93 @@ suggestions. All processing stays local by default — no data leaves the machin
+
+ +

Notifications (13)

+
- toon-config - Loads TOON based, AGENTS.toon rather than Markdown + Opencode Caelestia Notify V1 only - Desktop notifications when opencode finishes or needs your attention
- Use TOON based agent instructions. Command to analyize and improve agent instructions. + Sends a system notification when opencode finishes responding, hits an error, or waits for permission or input. Shows the session name so you know which task it is, and skips the done notification when your terminal is already focused. Built and tested on Caelestia shell, works on any Hyprland/Wayland desktop. Zero dependencies, single file.

- 🔗 View Repository + 🔗 View Repository
- Tree-sitter Language Pack - Code intelligence for 300+ languages + Opencode Host Notify Bridge V1 only - Devcontainer notifications bridged back to the host
- OpenCode plugin exposing tree-sitter-language-pack tools for parsing and extracting structure, imports, and symbols from 300+ languages. + OpenCode plugin and host helper that forward permission, question, and idle notifications from devcontainers to the host machine for desktop alerts and sound.

- 🔗 View Repository + 🔗 View Repository  •  📦 npm  •  📖 Docs
- TypeUI - Design systems, UI prompts, and layout variation guidance + Opencode Notify V1 only - Native OS notifications
- Open-source design layer for OpenCode that provides curated design skills, UI prompts, and layout variation guidance so agents can generate more consistent interfaces. Includes an OpenCode setup guide. + Native OS notifications for OpenCode - know when tasks complete.

- 🔗 View Repository + 🔗 View Repository
- ul-opencode-event - Multi-channel notifications (SMTP, DingTalk, Feishu) and token usage analytics + OpenCode ntfy.sh V1 only - Push notifications to keep you in the know, even when you're on the go. +
+ An OpenCode plugin that adds push notifications through ntfy.sh. +

+ 🔗 View Repository +
+
+ +
+ Opencode Status Popup V2 - Always-on-top status pill or tray icon that shows what the agent is doing (Windows) +
+ A second screen for your agent. While a session is thinking, a small always-on-top pill types the word out letter by letter, or a tray icon draws the letter o pixel by pixel. It turns amber on provider retries, red when an execution fails, and violet when OpenCode is waiting for a permission, so you can be in another window and still notice. One PowerShell host starts on demand and is shared by every instance, and the renderer can be switched at runtime with the /popup-* commands or a tool. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ Opencode update notifier V2 - Notify about plugin updates. +
+ Checks if your pinned plugins have newer versions available and shows a notification. +

+ 🔗 View Repository +
+
+ +
+ Ring a Bell Example V1 only - Simple terminal bell plugin +
+ A simple plugin to ring the terminal bell once a request is complete. +

+ 🔗 View Gist +
+
+ +
+ Simple Notify V1 only - Native desktop notifications with near-zero dependencies +
+ Lightweight desktop notification plugin for OpenCode. Sends native OS notifications via dbus (Linux) and osascript (macOS) when sessions complete, error, need approval, or wait for input. Shows project name, elapsed time, and message preview. +

+ 🔗 View Repository +
+
+ +
+ Smart Voice Notify V1 only - Intelligent voice notifications +
+ Smart voice notification plugin with multiple TTS engines (ElevenLabs, Edge TTS, SAPI) and intelligent reminder system. +

+ 🔗 View Repository +
+
+ +
+ ul-opencode-event V1 only - Multi-channel notifications (SMTP, DingTalk, Feishu) and token usage analytics
Get notified when OpenCode sessions complete, error, or need your attention - via SMTP email, DingTalk robot, or Feishu robot. - Multi-channel: SMTP, DingTalk, Feishu, local JSONL file @@ -1228,41 +1493,22 @@ suggestions. All processing stays local by default — no data leaves the machin - 74+ template variables with i18n support (zh/en) - Global + project config merge, automatic DB preload for crash recovery - Built-in CLI test tool -

- 🔗 View Repository + 🔗 View Repository  •  📦 npm
- UNMOJI - Strip emojis from output -
- A simple plugin that strips ALL emojis from agent outputs in Opencode. -

- 🔗 View Repository -
-
- -
- Vibe Coding Slack Notifier - Slack DM alerts for OpenCode task completion + Vibe Coding Slack Notifier V1 only - Slack DM alerts for OpenCode task completion
OpenCode-compatible Slack notifier plugin and toolkit for Codex, OpenCode, Claude Code, and Gemini workflows.

- 🔗 View Repository + 🔗 View Repository
- WakaTime - WakaTime integration -
- WakaTime integration plugin for tracking coding activity in opencode sessions. -

- 🔗 View Repository -
-
- -
- Warcraft Notifications - Fun sound notifications + Warcraft Notifications V1 only - Fun sound notifications
Notification plugin with Warcraft sounds for opencode completion alerts.

@@ -1271,43 +1517,128 @@ suggestions. All processing stays local by default — no data leaves the machin
- With Context MCP - Project-specific markdown notes + WSL Notifications V1 only - Native Windows toast notifications from WSL
- MCP server for managing project-specific markdown notes with templates, batch edits, and ignore patterns. + Enables OpenCode running inside WSL to send native Windows toast notifications for task completion, prompts, and errors using PowerShell and BurntToast.

- 🔗 View Repository + 🔗 View Repository +
+
+ +
+ +

Sessions & History (13)

+ +
+ AutoRecord V2 - Automatic session recording +
+ Automatically saves all OpenCode session records to Markdown files with centralized storage in ~/opencode-autorecord, plus generated HTML views (overview index + per-project pages) for browsing conversations. +

+ 🔗 View Repository
- Worktree Memory Sync - Auto-sync memory to git worktrees + Autotitle V1 only - AI-powered automatic session naming
- Automatically copies .opencode/memory/ from the main repository into new git worktrees on session init. Detects worktrees via the .git file, resolves the main repo, and syncs memory files only when the destination is empty — so it never overwrites your changes. + Two-phase session titling - instant keyword titles on user message, refined AI titles after response. Auto-selects cheapest model (flash/haiku/fast), respects custom titles, zero configuration needed.

- 🔗 View Repository + 🔗 View Repository
- Xberg - Local document extraction for 97+ formats + Handoff V1 only - Session handoff prompts
- OpenCode plugin exposing xberg CLI tools for document extraction, MIME detection, and supported-format discovery. + Creates focused handoff prompts for continuing work in a new session.

- 🔗 View Repository + 🔗 View Repository
- Xquik - X/Twitter data skill & MCP server + Laya Drift V1 only - Semantic drift monitoring for long-running OpenCode agent sessions.
- X/Twitter data skill — MCP server, REST API, 20 extraction tools. Works with Claude Code, Cursor, Codex, and 40+ agents. + Laya Drift monitors whether an OpenCode agent is staying aligned with its original plan over long-running sessions. It uses the Laya decision model to embed session state, compares the current semantic state against a calibrated baseline with Jensen-Shannon divergence, and surfaces a live drift score in the OpenCode UI. When drift gets high, it can inject the score into the system prompt so the agent can self-correct. Sessions can also be recalibrated to establish a new baseline after an intentional change in direction.

- 🔗 View Repository + 🔗 View Repository
- Zellij Namer - Auto-rename Zellij sessions + OpenCode Session Tracker V2 - TUI sidebar extension and Telegram integration to track active sessions/subagents and interact remotely. +
+ A lightweight, robust TUI sidebar extension and interactive Telegram Integration for OpenCode that brings real-time session tracking, multi-process routing, and remote monitoring directly to your terminal and phone. Monitor and drive your terminal agents remotely from your mobile device, answer interactive questions, approve or deny commands, and track status streams. +

+ 🔗 View Repository +
+
+ +
+ Opencode Sessions V1 only - Session management +
+ Session management plugin for OpenCode with multi-agent collaboration support. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Topics V2 - Smart, zero-token session re-titling that tracks topic drift +
+ Tracks topic drift across conversation turns and dynamically re-titles OpenCode sessions when the topic shifts, using zero-token local checks between assistant turns. +

+ 🔗 View Repository +
+
+ +
+ opencode-ask V2 - Multi-turn /btw-style side chat that never adds to your session +
+ Ask follow-up side questions about the current session in a full-screen view. Switch to the main conversation and back with shift+arrows, and close the side chat to forget it. Built for OpenCode 2. +

+ 🔗 View Repository +
+
+ +
+ opencode-lens V1 only - TUI bridge and MCP toolkit for inspecting and controlling live opencode sessions +
+ opencode-lens is an opencode TUI plugin plus MCP server that lets external agents inspect running opencode instances, send prompts, read messages/diffs/todos, handle permission and question prompts, and monitor session completion through a local Unix socket bridge. +

+ 🔗 View Repository  •  📦 npm  •  📖 Docs +
+
+ +
+ opencode-session-tools V2 - OpenCode v2 session tools – session metadata, history recall, and Claude Code-style messaging between sessions +
+ Two plugins for OpenCode v2, built on the public v2 plugin API. opencode-meta adds opencode_meta (bounded session metadata, relations, statistics and tool usage) and send_message, which lets one session send plain text to another by ID or title; the target receives it as a queued message marked as coming from a peer, never as user approval. opencode-recall-lite adds recall and recall_get to search and read back earlier sessions across projects, with a short reminder to check history before answering questions about past work. +

+ 🔗 View Repository +
+
+ +
+ Session Time V2 - Session start / last answer timestamps and a clock +
+ Adds a wall clock to the prompt footer, a "Session" block to the sidebar with the session start time and the time of the last model answer, and a /time timeline panel with every turn's timing. +

+ 🔗 View Repository +
+
+ +
+ Smart Title V1 only - Auto-generate session titles +
+ Auto-generates meaningful session titles using AI. +

+ 🔗 View Repository +
+
+ +
+ Zellij Namer V1 only - Auto-rename Zellij sessions
Keeps your Zellij session name in sync with your work.

@@ -1316,7 +1647,1069 @@ suggestions. All processing stays local by default — no data leaves the machin

-➕ Add a Plugin via PR + +

Code Review & Quality (9)

+ +
+ Boffin V2 - Routed architectural guardrails for AI coding agents in OpenCode +
+ Staff-engineer layer for AI coding agents: routes per-edit architectural constraints and requires verification. Not another AGENTS.md. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ dejavu V2 - Cross-session error gates for recurring tool-call failures +
+ Mechanically detects recurring tool-call failures (3 failures across 2 distinct sessions promote a gate) and enforces them: reminder on the next attempt, hard block on same-session repeat offense. Diagnostics never block, they annotate. Two-scope store with secret scrubbing and control-char stripping before persistence, 60-day TTL, self-healing reconcile, doctor report. One harness-neutral store shared with Claude Code, Codex CLI, Gemini CLI, Cursor, Copilot CLI, Crush, Devin CLI, Kiro and Cline. TypeScript + Bun, ships as source, no build step. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ kibi-opencode V1 only - OpenCode guidance for keeping requirements linked to code and tests +
+ Kibi connects project requirements to code and tests. This optional OpenCode plugin gives agents relevant guidance and runs background sync and checks. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ lazy-clean V1 only - Minimal-code guidance, review commands, and a dependency-free TS/JS slop checker +
+ Injects configurable minimal-code guidance into OpenCode each turn and adds slash commands for code review, audits, and test review. Includes a local, dependency-free TypeScript/JavaScript heuristic checker, run manually in OpenCode. Install from the full checkout to keep the shared hooks and skills directories alongside the plugin. +

+ 🔗 View Repository +
+
+ +
+ opencode-review V1 only - Automatic structured code review with configurable dimensions and auto-fix +
+ An automatic code review plugin for OpenCode CLI. Reviews staged changes when session goes idle, with configurable cooldown, multi-dimension analysis (code quality, security, performance, testing, documentation), severity levels, and auto-fix chain support. +

+ 🔗 View Repository +
+
+ +
+ Semantic Anchors V1 only - Runtime contract enforcement for safe, traceable AI agents +
+ Runtime steering plugin that enforces behavioral contracts via plugin hooks. Monitors chat messages and tool calls against configurable rules, supports BLOCK/WARN modes, built-in profiles (socratic, architecture), step confirmation intervals, override mechanism, dynamic role switching, and Zod-validated YAML configuration. +

+ 🔗 View Repository +
+
+ +
+ Veris for Daytona V1 only - OpenCode sessions run in a Daytona sandbox whose vendor API calls are answered by Veris twins +
+ Every OpenCode session runs in a Daytona sandbox whose calls to Stripe and the rest of your vendor stack are answered by stateful Veris twins, and the agent gets a receipt of what the vendor actually received. Unmodified code, real hostnames, no image to build. +

+ 🔗 View Repository  •  📦 npm  •  📖 Docs +
+
+ +
+ Veris for E2B V1 only - OpenCode sessions run in an E2B sandbox whose vendor API calls are answered by Veris twins +
+ Every OpenCode session runs in an E2B sandbox whose outbound vendor API calls are answered by stateful Veris twins, with a receipt of what the vendor actually received. One line in opencode.json - no template to register, no server to start. +

+ 🔗 View Repository  •  📦 npm  •  📖 Docs +
+
+ +
+ Veris Sim V2 - Three engineer-invoked commands that test an application against Veris twins of its services +
+ Three engineer-invoked commands that test an application against Veris twins of the services it calls. setup wires a repository once. build measures every vendor claim the task rests on before designing, then proves the change through veris-proxy. fix reproduces the failure before touching source and proves it closed. Ships the veris MCP server. +

+ 🔗 View Repository  •  📦 npm  •  📖 Docs +
+
+ +
+ +

Security & Sandboxing (13)

+ +
+ Aegis-DevOps V1 only - Blocks kubectl delete, terraform destroy or DROP TABLE unless your signed policy allows it +
+ A tool.execute.before plugin that checks every bash command OpenCode wants to run (kubectl, terraform/tofu, aws/az/gcloud, helm, argocd, git, SQL) against a signed, authority-checked policy before it runs. A rule only counts if it hasn't been edited since it was signed and its author was allowed to write that kind of rule, so a line planted in a ticket can't become policy. Only active in projects with a .aegis/ policy. Install with `pip install aegis-devops && aegis install opencode`. +

+ 🔗 View Repository +
+
+ +
+ Aftermath V1 only - Post-failure recovery for agents — stop, revert cheap damage, return to last-known-good +
+ Aftermath is a post-failure recovery skill for OpenCode. When something breaks — a test suite goes green to red, the same error recurs, a destructive command looms, or the user says "you broke it" — it stops forward motion, reverts the actual bad hunk instead of patching around it, and returns the session to last-known-good. Includes four intensity levels (lite/full/ultra/off), four slash commands (status, revert, audit, log), and lifecycle tripwires for test failures, repeat errors, and destructive commands. +

+ 🔗 View Repository +
+
+ +
+ CC Safety Net V2 - Safety net catching destructive commands +
+ A Claude Code plugin that acts as a safety net, catching destructive git and filesystem commands before they execute. +

+ 🔗 View Repository +
+
+ +
+ DataCloak V1 only - Swap secrets and PII for realistic fakes before AI sees them; restore originals on return. +
+ Local-first sensitive-data protection for OpenCode. Cloaks API keys, JWTs, PEMs, env vars, DSNs, emails, phones and IPs with Faker-generated synthetics pre-dispatch, blocks env-dump tool calls, redacts tool output, and auto-restores originals into file writes. Zero-config and fully automatic. +

+ 🔗 View Repository +
+
+ +
+ Envsitter Guard V1 only - Prevent .env leaks +
+ OpenCode plugin that prevents agents/tools from reading or editing sensitive .env* files, while still allowing safe inspection via EnvSitter (keys + deterministic fingerprints; never values). +

+ 🔗 View Repository +
+
+ +
+ jes V1 only - Prompt-injection and jailbreak guardrails for AI agents, powered by decision models like Jev. +
+ OpenCode plugin from the open-source jes library. It checks the user prompt, each tool call before it runs and each tool result, sending every check to a decision model such as Jev, which outputs a classification, not text. Secrets and PII are redacted locally before any model sees them. The Jev checks call a hosted API and need a TYPESAFE_API_KEY. +

+ 🔗 View Repository +
+
+ +
+ Opencode Log Sanitizer V1 only - Sanitizes pasted logs by redacting long strings, JWTs, bcrypt hashes, and base64 blobs +
+ Sanitizes pasted logs before sending them to AI by redacting long quoted strings, JWT tokens, bcrypt hashes, and base64 blobs to reduce token usage and remove irrelevant noise. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Seatbelt V2 - macOS kernel sandbox that blocks agents from reading secrets via .ocignore +
+ Applies a macOS Seatbelt profile to the OpenCode process the moment the plugin loads, so every tool and child process (read, glob, grep, the shell, MCP servers, custom tools) is confined by the kernel. Patterns from .ocignore plus a built-in secret baseline are compiled to syscall-level rules instead of being matched against command text, so "tail" instead of "cat", symlinks, hardlinks, base64 and interpreters are all covered, and rename/unlink of protected files is blocked too. Requires macOS and OpenCode v2. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ opencode-pre-tool-review V2 - Model-assisted pre-execution review for OpenCode V2 tool permissions +
+ Experimental OpenCode V2 plugin that reviews tool permission checks using a configurable reviewer model before execution. Integrates with OpenCode's native permission system, supports conservative read-only whitelisting, and offers user-confirmed one-time releases for blocked actions. +

+ 🔗 View Repository +
+
+ +
+ opencode-safety-gates V2 - Run Claude Code bash-gate scripts inside OpenCode, deny self-revoking commands, catch fabricated CLI syntax. +
+ Safety gates for OpenCode built on the V2 plugin API, with zero runtime dependencies. Wraps the built-in bash tool executor and runs your Claude Code PreToolUse/Bash gate scripts unchanged, from the same settings.json wiring — one script enforces in both tools. Ships a bundled example gate (options.exampleGates) that denies self-revoking commands — service stops that destroy the session's own access to the host (sssd, sshd, NetworkManager, firewalld, iptables flush, SSSD cache wipe). A config-driven verify-cli-syntax guard sends one corrective prompt per session when a reply recommends CLI syntax the session shows no verification for (--help, man page, or upstream source). Setup logs a health line with the active gate count, so a dead gate is never silent. +

+ 🔗 View Repository +
+
+ +
+ opencode-shield-bash V2 - Gate bash calls through an LLM judge subagent session to allow or deny their execution +
+ Gate every bash tool call through a second judge session. The judge applies a fixed policy covering destructive file operations, disk/device writes, piping remote output to interpreters, privilege escalation, reverse shells, secret exfiltration, resource bombs, and system-wide installs, and returns an allow/deny verdict before the command runs. Denials surface the reason to the calling agent; verdicts are cached per root session. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ Secret Scrubber V2 - Scrub secrets from the outbound LLM prompt before it reaches the provider +
+ Redacts secrets from the whole outbound prompt (system, messages, tool calls, and tool results) at the V2 session hooks, so the model and provider never see them. Two detection layers - known-value matching from environment variables and an optional secrets file, plus a vendored high-signal Gitleaks pattern set. Includes local logging and sub-millisecond overhead per call. +

+ 🔗 View Repository +
+
+ +
+ Secrets Env V2 - Inject secrets from a dotenv file into process.env, hot-reload, reconnect MCP servers +
+ Loads secrets from ~/.config/opencode/secrets.env (dotenv format) into process.env at startup, so MCP servers ({env:NAME} references), other plugins, and OpenCode's own provider-key discovery can use them — keeping keys out of opencode.json(c) and your config safe to commit. Watches the file and hot-reloads changes in about a second, then reconnects only the MCP servers that reference a changed variable. Works with both OpenCode V1 (opencode-ai >= 1.14.34) and V2 (@opencode/cli). +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ +

Git & GitHub (5)

+ +
+ GitHub Release V2 - Automated GitHub releases +
+ Create and publish GitHub releases with semantic versioning, tag management, and auto-generated release notes. +

+ 🔗 View Repository +
+
+ +
+ Opencode Worktree V1 only - Zero-friction git worktrees +
+ Zero-friction git worktrees for OpenCode. Auto-spawns terminals, syncs files, cleans up on exit. +

+ 🔗 View Repository +
+
+ +
+ PR Auto-Signature V2 - Automatically adds AI model signature to PRs, Issues, and Commits +
+ Plugin that automatically appends AI model signature to Pull Requests, Issues, and git commit messages. Supports GitHub MCP tools, git CLI, and gh CLI. Recognizes 90+ AI models including Claude, GPT, Gemini, DeepSeek, Llama, Mistral, and more. +

+ 🔗 View Repository +
+
+ +
+ PRs V2 - Lists GitHub pull requests referenced by the current session +
+ OpenCode TUI plugin that lists GitHub pull requests opened by the current session in the sidebar, with titles scrolling on hover. Requires an installed and authenticated GitHub CLI. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ Worktrees V2 - Run subagents in isolated git worktrees so parallel editors never collide +
+ Selected agents (default `worker`) each get their own git worktree branched from the default branch, with file copies via .worktreeinclude, automatic cleanup of unchanged worktrees, and enforcement against edits to the main checkout. Includes a bundled worktree-isolation skill. +

+ 🔗 View Repository +
+
+ +
+ +

Remote & Mobile (2)

+ +
+ opencode-tg V2 - Control OpenCode from Telegram — every session gets its own thread +
+ Runs inside the OpenCode server as a plugin (zero runtime dependencies) and mirrors every session into a Telegram chat: each session and subagent gets its own thread, and writing in the thread is prompting the agent. Answer the agent's questions and approve permissions with a tap, run shell commands in the session (a three-tier guard passes read-only commands, asks for confirmation on service-breaking ones, and blocks the irreversible), browse and attach project files, schedule tasks, switch models and agents, watch CI runs, and steer the message queue mid-turn. Optional extras: multi-bot topologies (one bot per project or per session), local whisper.cpp voice transcription, and a dead-prompt watchdog that reports the real cause when a turn never starts. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ OpenCodeMirror V1 only - Bridge OpenCode sessions to chat platforms from your phone +
+ Native OpenCode plugin that mirrors session output to Telegram and lets you approve permissions, answer questions, and send prompts from chat. Runs inside the OpenCode process with no separate server. +

+ 🔗 View Repository +
+
+ +
+ +

Web & Browser (7)

+ +
+ Crawlberg V2 - Web crawling and scraping tools for opencode +
+ OpenCode plugin exposing crawlberg CLI tools for scraping pages, crawling sites, and mapping URLs to JSON or Markdown. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ Google AI Search V1 only - Query Google AI Mode (SGE) +
+ An opencode plugin that exposes a native tool for querying Google AI Mode (SGE). +

+ 🔗 View Repository +
+
+ +
+ HTML to Markdown V2 - Fast, lossless HTML to Markdown conversion +
+ OpenCode plugin exposing html-to-markdown CLI tools for converting HTML to clean Markdown with metadata, tables, and document structure. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ MrScraper V2 MCP - Web pages as HTML, Markdown, or screenshots, plus Google search, through the hosted MrScraper MCP server +
+ OpenCode plugin that registers the hosted MrScraper MCP server (https://mcp.mrscraper.com/mcp, OAuth 2.1) and three on-demand skills. Its tools retrieve known pages as HTML, Markdown, or screenshots (scraperAPI), search Google (webSearch), and report account usage (status). The skills follow a retrieve-first workflow that preserves raw page content and derives structured output locally. Works in OpenCode 2 and OpenCode 1. A MrScraper account is required. +

+ 🔗 View Repository  •  📦 npm  •  📖 Docs +
+
+ +
+ OpenCode Chromium Browser Plugin unverified - Browser automation for Chromium browsers with a readable extension and native host +
+ OpenCode browser automation for Chromium-based browsers using a readable Manifest V3 extension, Node.js native messaging host, and OpenCode-native tools. Supports Chrome, Edge, Brave, Chromium, screenshots, CDP commands, DOM actions, downloads, console/network inspection, and controlled tab sessions. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ opencode-serpapi V2 - Real-time web search for OpenCode via the SerpApi API +
+ Adds a native serpapi_search tool to OpenCode, giving it real-time access to Google, Amazon, YouTube, and 100+ other search engines through SerpApi, without manual MCP configuration. +

+ 🔗 View Repository +
+
+ +
+ Xquik unverified MCP - X/Twitter data skill & MCP server +
+ X/Twitter data skill — MCP server, REST API, 20 extraction tools. Works with Claude Code, Cursor, Codex, and 40+ agents. +

+ 🔗 View Repository +
+
+ +
+ +

UI & TUI (13)

+ +
+ aerovato/opencode-quotes-plugin V1 only - Display inspirational quotes instead of tips +
+ Replaces the default home-page tips with inspirational quotes for a more motivating OpenCode experience. +

+ 🔗 View Repository +
+
+ +
+ Cut V2 - Clipboard-aware Ctrl+X cut for prompt and dialog inputs +
+ Makes Ctrl+X cut selected text in prompt and dialog inputs. Copies to the system clipboard first and deletes only after the write succeeds; leaves the input untouched if the selection or focused editor changes, and ignores repeated cut requests while a copy is pending. +

+ 🔗 View Repository +
+
+ +
+ Lens V2 - Plugin injection framework for OpenCode Web +
+ A local reverse proxy that loads web plugins and injects them into the OpenCode Web HTML response. Adds script injection, an integrated settings UI for toggling plugins, and a simple manifest format for building browser-side OpenCode Web plugins. Enables extending the OpenCode Web UI with custom JavaScript modules, HTML injection, and interactive controls. +

+ 🔗 View Repository +
+
+ +
+ Opencode Agents Sidebar V1 only - Browse configured OhMyOpenAgent agents in the TUI +
+ OpenCode sidebar plugin that displays configured OhMyOpenAgent agents with lifecycle-based categories, collapsible sections, descriptions, and model information. +

+ 🔗 View Repository +
+
+ +
+ Opencode Canvas V1 only - Interactive terminal canvases in tmux splits +
+ Interactive terminal canvases (calendars, documents, flight booking) in tmux splits. Port of claude-canvas for OpenCode. +

+ 🔗 View Repository +
+
+ +
+ Opencode Visualizer V1 only - 2D pixel-art office for AI agents +
+ Turning raw OpenCode terminal logs into cozy 2D pixel office chaos. Watch your agents work, idle, and celebrate success in a bustling virtual office. +

+ 🔗 View Repository +
+
+ +
+ opencode-ascii V1 only - Strip unicode characters from output and replace them by their ASCII equivalents +
+ Substitute unicode characters for ASCII. Em-dash (—) and en-dash (–) for hyphens (-); right arrow (→) for (->) and so on. +

+ 🔗 View Repository +
+
+ +
+ opencode-dir-tree-tui V2 - File tree sidebar with Git status and quick file actions +
+ Browse project files in the OpenCode V2 sidebar with Git status indicators, custom ignore rules, path copying, and quick file and folder opening. +

+ 🔗 View Repository +
+
+ +
+ opencode-fold-tools V2 - Expand tool outputs on click, with one row per call and native file diffs. +
+ Keeps each OpenCode TUI tool call on its own line in conversation order. +Click to reveal output underneath while preserving the input summary, +or use Ctrl+O to toggle all matched rows. Retains native colored file diffs +and provides a full tool-record viewer. Includes npm installation and a GIF demo. +

+ 🔗 View Repository +
+
+ +
+ opencode-shortcuts V2 - A keyboard shortcut cheatsheet and rebinder for the OpenCode v1 and v2 TUI +
+ Press ctrl+/ to see every key you can use in the screen you're on, including your overrides. Rebind any built-in command in place, with clash handling and comment-preserving config edits. OpenCode v1 and v2. +

+ 🔗 View Repository +
+
+ +
+ opencode-skills-tui V2 - Browse skills, track loaded state, and preview SKILL.md +
+ OpenCode V2 skills sidebar with loaded-state tracking, SKILL.md previews, token estimates, and skill mentions in prompts. +

+ 🔗 View Repository +
+
+ +
+ Shell Magazine V2 - Real-time shell command monitor in the TUI sidebar +
+ Sidebar panel that tracks every shell command in real time. Reads the host shell registry and session.shell.* events for true status (running/exited/timeout/killed, exit code, PID, elapsed time), tails background output, backfills history from session messages, and offers kill, copy, open-output, and finish notifications. Multi-TUI safe through the host's atomic storage. +

+ 🔗 View Repository +
+
+ +
+ UNMOJI unverified - Strip emojis from output +
+ A simple plugin that strips ALL emojis from agent outputs in Opencode. +

+ 🔗 View Repository +
+
+ +
+ +

Voice (4)

+ +
+ Listen STT V2 - Offline dictation, 99 languages +
+ Voice dictation for OpenCode V2 on Windows. Runs whisper.cpp locally across 99 languages, pins the spoken language so it is not mis-detected, and uses CUDA or Vulkan automatically. Nothing leaves the machine. +

+ 🔗 View Repository +
+
+ +
+ Opencode TTS V1 only - Voice summaries for idle responses +
+ Speaks assistant responses aloud when a session goes idle, with summary or full-text modes and local TTS backends. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Web Voice Plugin V2 - Voice input for OpenCode Web through Lens +
+ Adds a microphone button to the OpenCode Web prompt composer using the Web Speech API. Record speech, insert transcripts directly into the prompt editor, and send naturally. Requires Lens to load. +

+ 🔗 View Repository +
+
+ +
+ Speak TTS V2 - Free neural voices, no API key +
+ Reads OpenCode answers aloud on Windows using Microsoft's free Edge neural voices. Condenses long answers through the model you already have connected, and falls back to the built-in Windows voice when Edge is unreachable. +

+ 🔗 View Repository +
+
+ +
+ +

Media & Documents (9)

+ +
+ GPT Imagegen V1 only - gpt-image-2 in OpenCode — no API cost when using your ChatGPT subscription +
+ Brings gpt-image-2 (ChatGPT Images 2) image generation to OpenCode. When you sign into OpenCode with your ChatGPT account, generations are billed against your existing Plus / Pro / Business plan — no per-image API cost. An OpenAI API key path is also planned. Supports reference images for style guidance and edits. +

+ 🔗 View Repository +
+
+ +
+ Image Preview V2 - Inline image previews from URLs in OpenCode Web +
+ A Lens plugin that renders images from URLs inline in OpenCode Web chat. Supports markdown image syntax (\![alt](url)) and raw image URLs. Features click-to-expand, lazy loading, code block protection, and error fallbacks. +

+ 🔗 View Repository +
+
+ +
+ Image Reader Relay V1 only - Let text-only models read pasted images via a vision model (OpenCode plugin) +
+ OpenCode plugin that lets text-only models read images pasted into a session. +Stashes pasted images in memory, injects a note into the model's context only, +and registers a `read_image` tool the main model calls with its own question — +relaying the image to a configurable vision model in a throwaway session, then +cleaning up. Models that support images natively are left untouched. +

+ 🔗 View Repository +
+
+ +
+ Modellix V2 - Unified API for AI image and video generation +
+ OpenCode-compatible plugin/skill for async image and video generation via Modellix CLI (model run --wait, task download) with default T2I/T2V/I2I/I2V/V2V/TTS/STT/STS models. +

+ 🔗 View Repository +
+
+ +
+ Oh My Cassette V2 - Chat your raw clips into a finished cut +
+ Adds a local stdio MCP server that turns a chat message into an edited video: beat-synced cuts, auto-matched background music, subtitles, transitions, and picture-in-picture. Ingest local clips, then drive a persistent multi-turn editing thread — every turn returns a timeline delta and a contact-sheet preview, so an edit can be reviewed before anything renders. Editing and rendering run on the hosted Cassette service, which requires an account; the plugin, skills, and MCP server are MIT licensed. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ OpenCode Vision V2 - Give text-only OpenCode models the ability to see images +
+ Intercepts images pasted into chat, routes them through a configurable vision backend (an MCP server or a local CLI like MiniMax mmx), and injects the resulting text description back into the conversation so non-vision models can reason about images. Ships no vision of its own — you provide the backend, it provides the wiring. +

+ 🔗 View Repository +
+
+ +
+ SpriteCook MCP V2 MCP - Generate 2D game assets from OpenCode with SpriteCook +
+ Connect OpenCode to SpriteCook to generate game assets with AI, including sprites, pixel art, icons, tilesets, characters, and animations. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Vision V2 - Screen recording and video analysis tools (record_screen, watch_video, video_frames) +
+ Gives OpenCode agents eyes: record the full screen or a single window with ffmpeg, send clips to a video-capable model for timestamped Q&A, or turn videos into timestamped contact sheets for image-only vision models. Windows-focused, with a bundled video-analysis skill. +

+ 🔗 View Repository +
+
+ +
+ Xberg V2 - Local document extraction for 97+ formats +
+ OpenCode plugin exposing xberg CLI tools for document extraction, MIME detection, and supported-format discovery. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ +

Docs & Research (3)

+ +
+ opencode-craft V1 only - Senior pair programmer, craftsmanship coach, and knowledge ledger for OpenCode +
+ Transforms OpenCode into a seasoned Principal Engineer / Technical Craft Lead who builds software at full velocity while coaching system architecture, trade-offs, and interview readiness. Includes auto-synced LEARNING_PATH.md and @expand / @interview-angle skills. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ Plugin Template V1 only - CICD setup for plugins +
+ Focuses on providing the CICD setup with generator script, release please, bun publish, npm trusted publishing, and mise tasks. +

+ 🔗 View Repository +
+
+ +
+ Research Papers V1 only - Search arXiv and OpenAlex for research papers with recency and citation filtering +
+ OpenCode plugin that adds a research_papers tool for searching scholarly literature. Uses arXiv for fresh preprints and OpenAlex for broader metadata, citation counts, and open-access links. Supports filtering by latest, trending, or top-cited papers. +

+ 🔗 View Repository +
+
+ +
+ +

Environment & Setup (11)

+ +
+ Awake V2 - Keeps your computer awake while a session works, even with the lid closed +
+ OpenCode plugin that keeps the computer from sleeping while a session is working, including lid-close sleep on MacBooks. Other sleep plugins only block idle sleep with caffeinate; this one also blocks lid sleep via pmset on macOS and systemd-inhibit on Linux, and releases it as soon as every session is idle. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ Background V1 only - Background process management +
+ Background process management plugin for opencode. +

+ 🔗 View Repository +
+
+ +
+ Devcontainers V1 only - Multi-branch devcontainers +
+ Plugin for running multiple devcontainer instances with auto-assigned ports and branch-based isolation. +

+ 🔗 View Repository +
+
+ +
+ Direnv V1 only - Load direnv variables +
+ Automatically loads direnv environment variables at session start. Perfect for Nix flakes. +

+ 🔗 View Repository +
+
+ +
+ OpenCode 2 Shell Tasks V2 - Claude Code-style background shell jobs for OpenCode 2 (V2 plugin API) +
+ Run long commands without blocking the current turn: detached processes that return a task ID immediately, combined stdout/stderr logs with bounded tails, exit-code reconciliation after a restart, process-group kill, and a native /tasks TUI panel. Built on the OpenCode 2 V2 plugin API. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Agent Tmux unverified - Real-time tmux panes for OpenCode agents with auto-launch, streaming, and cleanup. +
+ Smart tmux integration for OpenCode that auto-spawns panes to stream agent output, supports flexible layouts and multi-port setups, and cleans up when sessions finish. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Docker Panel V2 - Docker containers in the TUI sidebar, with control and logs +
+ Shows the running containers in the session sidebar with their state, published ports and compose project, and a pin keeps a container visible whatever its state. Clicking a row opens the actions docker accepts for that container's current state - start, stop, restart, tearing down its compose project behind a confirmation, or starting the stack declared by the compose file in the agent directory - and the same window doubles as a scrollable log view. +

+ 🔗 View Repository +
+
+ +
+ Opencode Synced V2 - Sync configs across machines +
+ Enables syncing global opencode configurations across machines with public/private visibility options. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Zellij Indicator V2 - Show each OpenCode session's status and title on its Zellij tab +
+ Puts a status icon (working, needs-you, done-unseen, done-seen) and the session title on each Zellij tab, so you can see at a glance which of your parallel OpenCode agents is busy, blocked on a prompt, or finished — without switching tabs. Includes an optional stopwatch and sound notifications. +

+ 🔗 View Repository +
+
+ +
+ Shell Strategy unverified - Avoid interactive shell hangs +
+ Instructions file that teaches LLMs how to avoid interactive shell commands that hang in non-TTY environments. +

+ 🔗 View Repository +
+
+ +
+ Stay Awake V2 - Keep the computer awake only while a session is generating +
+ Long agent runs (model streaming, tool execution, compaction, rate-limit retries) routinely take minutes with no user input, and default OS power settings treat that as idle and suspend mid-prompt. This plugin holds a system sleep inhibitor for exactly as long as any session is generating, then releases it — caffeinate -dims -w <server pid> on macOS, systemd-inhibit on Linux, no-op elsewhere. Busy detection is event-driven rather than polling, so a tool call that runs for minutes keeps its work item open instead of being released mid-run. Every inhibitor is bound to the server pid and a stale cap bounds any lost end event, so the machine can never be wedged awake. Zero dependencies, MIT. +

+ 🔗 View Repository +
+
+ +
+ +

Observability (13)

+ +
+ @telemetry-dev/opencode V1 only - OpenTelemetry traces for OpenCode agent turns, model calls, and tools +
+ Records OpenCode agent turns, model calls, tool executions, and session events with OpenTelemetry for telemetry.dev. Available as the @telemetry-dev/opencode npm package; source and setup instructions are in packages/opencode of the linked SDK repository. +

+ 🔗 View Repository +
+
+ +
+ Godmode V1 only - A local, tamper-evident record of what a coding agent did, what it claimed, and what was verified. +
+ Godmode keeps a hash-chained local record of what a coding agent did, what it claimed, and what was verified, and refuses "done" without a citation. On OpenCode it runs as an AGENTS.md instruction adapter plus an optional Bun plugin shim (adapters/opencode/godmode.opencode.js) that routes every bash, write, edit and patch call through the same pre-tool gate the other hosts use and throws before a refused tool runs. Zero runtime dependencies, zero network use, nothing leaves the machine. +

+ 🔗 View Repository +
+
+ +
+ MARGINAL V1 only - Runtime governance for OpenCode that detects no-progress repetition and records local evidence. +
+ MARGINAL is a local-first runtime governor for AI coding agents with an OpenCode observe-only integration. It observes tool activity, detects proven no-progress repetition, and records decision evidence without blocking OpenCode actions. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Obvious Grid V1 only - The obvious grid — know what every agent is doing from across the room +
+ Ever squinted at five terminals trying to figure out who's actually working? This plugin puts every opencode instance on one big screen as a giant color-coded card — orange = working, blue = waiting on you, red = errored, green = idle. Readable from across the room, so "obvious" is not just a vibe, it's a font size. Stick it on the wall display and you'll never walk over to squint again. It's a grid, but make it fashion: each card carries live tokens, cost, cache rates, speed graphs, git branch, and deep links into web sessions — plus built-in ntfy push and alarm-sound notifications, because even an obvious grid needs to yell at you sometimes. Zero infrastructure: the plugin serves its own page. One install. Infinite peace of mind. Your agents will never know they're being watched. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ Opencode Telemetry V1 only - Passive cross-session telemetry to local SQLite; cost rollups across agent orchestration chains +
+ Logs every opencode session to a local SQLite database automatically — tokens, tool calls, skills, per-turn cost. Aggregates costs across orchestration chains (conductor + child sessions), offers turn-by-turn forensic inspection, and ships an `octm` CLI for reports without spending model tokens. Zero cloud, zero network, no message bodies stored. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Throughput V1 only - Real-time LLM performance monitoring +
+ Real-time LLM performance monitoring plugin for OpenCode. Tracks TTFT, TPS, latency, token usage, and cost per model with toast notifications and a TUI sidebar display. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Vitals V2 - Turns, steps and streaming tok/s in a small always-on-top bar +
+ A desktop bar for the session you are working in - turns, steps, and average streaming tokens per second, measured as generated tokens over active stream time so tool waiting stays out of the denominator. One-command install with no configuration file edit and no network calls; standard-library Python only, built for OpenCode V2. +

+ 🔗 View Repository +
+
+ +
+ opencode-mlflow-plugin V1 only - Track OpenCode session metrics and tool execution timings in MLflow. +
+ Records OpenCode sessions as MLflow runs with message and tool counts, tool execution timings, and agent, model, and provider tags. Connects to a local MLflow tracking server for comparing session metrics. Available on npm as opencode-mlflow-plugin. +

+ 🔗 View Repository +
+
+ +
+ opencode-plugin-otel V2 - OpenTelemetry telemetry exporter for opencode sessions, mirroring Claude Code monitoring signals +
+ Exports metrics, logs, and traces from opencode sessions via OTLP/gRPC to any OpenTelemetry-compatible backend (Datadog, Honeycomb, Grafana Cloud, etc.). Instruments session lifecycle, token usage, cost, tool durations, and git commits — mirroring the same signals as Claude Code's monitoring. +

+ 🔗 View Repository +
+
+ +
+ opencode-trace V2 - Capture raw json LLM requests+responses as jsonl traces, with interactive HTML viewer +
+ OpenCode plugin that logs raw provider request and response payloads to ~/opencode-trace as self-contained HTML files with an interactive viewer for debugging and inspection. +

+ 🔗 View Repository +
+
+ +
+ opencode-trace V1 only - Automatic tracing, visualization, and replay for OpenCode AI conversations with token and latency metrics +
+ A comprehensive tool suite that automatically records every interaction between OpenCode and AI Providers (OpenAI, Anthropic), including complete request/response payloads, token usage, and latency metrics. Features a real-time Web Viewer for conversation history and statistics, per-session tracing control via slash commands and agent tools, CLI for export/query, and support for both global and project-level storage. +

+ 🔗 View Repository +
+
+ +
+ System Prompt Logger V1 only - System prompt logger +
+ OpenCode plugin that intercepts the system prompt before it's sent to the LLM and logs it. +

+ 🔗 View Repository +
+
+ +
+ WakaTime V2 - WakaTime integration +
+ WakaTime integration plugin for tracking coding activity in opencode sessions. +

+ 🔗 View Repository +
+
+ +
+ +

Integrations (4)

+ +
+ Beads Plugin V1 only - Beads issue tracker integration +
+ Integration for Steve Yegge's beads issue tracker with /bd-* commands. +

+ 🔗 View Repository +
+
+ +
+ Dodo Payments V1 only - Payments, subscriptions, webhooks, and billing for OpenCode agents +
+ Official Dodo Payments plugin for OpenCode (also Claude Code, Codex, Cursor). Bundles eight integration skills (checkout, subscriptions, webhooks, usage-based billing, credits, license keys, BillingSDK, best practices) plus two MCP servers — a live API server with browser OAuth and a documentation search server. Distributed via npm as @dodopayments/opencode-plugin. +

+ 🔗 View Repository +
+
+ +
+ Internet Court V2 - Trust layer for agent-to-agent commerce: mandates, payments, escrow, dispute resolution. +
+ The trust layer for agent-to-agent commerce — natural-language mandates, delegated permissions, x402 payments, escrow, and dispute resolution as one open, catch-all skill. By the Internet Court Consortium (internetcourt.org). MIT licensed. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Pilot unverified - Automation daemon +
+ Automation daemon that polls for work from GitHub issues and Linear tickets. +

+ 🔗 View Repository +
+
+ +
+ +

Code Intelligence (4)

+ +
+ Morph Fast Apply V2 - 10,500+ tokens/sec code editing +
+ Integrates Morph's Fast Apply API for faster code editing with lazy edit markers and unified diff output. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Indexing V2 - Semantic code search for OpenCode that reuses Kilo Code's index and keeps its own incremental one. +
+ Adds semantic (vector) code search to OpenCode. It reads Kilo Code's existing +index (Qdrant ws-* collections and Kilo's local LanceDB) without ever modifying +it, and can import those vectors and chunks at zero embedding cost, then keep +its own incremental index (Qdrant oc-* collections or embedded LanceDB) keyed +on a per-file SHA-256. Search merges results from both indexes, so semantic +search keeps working even when Kilo is not installed, is disabled, or its index +is stale. + +- Reuse Kilo Code's index read-only, importing vectors without re-embedding +- Own incremental index with manifest-based freshness (new/changed/deleted only) +- Vector-store agnostic: Qdrant or embedded LanceDB +- Settings and index actions from the TUI, Desktop and web clients +- Supported embedding providers: Mistral, OpenAI, Ollama, Gemini, Voyage, + OpenRouter and any OpenAI-compatible endpoint +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ OpenCodeRAG V2 - Local-first RAG plugin for semantic code search with tree-sitter chunking and LanceDB +
+ A local-first Retrieval-Augmented Generation plugin for OpenCode that enables semantic code +search across your workspace. Features AST-aware chunking via tree-sitter (19 languages), +incremental indexing with file-change detection, watch mode for live re-indexing, and +configurable embeddings via Ollama (default) or OpenAI. Includes a CLI (index, query, status, +clear) and an OpenCode plugin with a chunk retrieval tool + automatic chat.message file +suggestions. All processing stays local by default — no data leaves the machine. +

+ 🔗 View Repository +
+
+ +
+ Tree-sitter Language Pack V2 - Code intelligence for 300+ languages +
+ OpenCode plugin exposing tree-sitter-language-pack tools for parsing and extracting structure, imports, and symbols from 300+ languages. +

+ 🔗 View Repository  •  📦 npm +
+
+ +
+ +

Prompting & Skills (12)

+ +
+ Agent Skills (JDT) V1 only - Dynamic skills loader +
+ Dynamic skills loader that discovers skills from project, user, and plugin directories. +

+ 🔗 View Repository +
+
+ +
+ Command Inject V1 only - Auto-inject project commands into OpenCode +
+ Automatically discovers and injects Makefile targets, npm/pnpm/yarn/bun scripts, and local skills at startup. Type / to see and run all project commands. +

+ 🔗 View Repository +
+
+ +
+ homie V2 - Four-level chat-voice personality layer — same code, different voice (off / yo / dawg / mafa) +
+ A prompt-injection personality layer that changes how the agent talks in prose while leaving technical answers, code, and commands identical. Ships yo, dawg, and mafa registers plus an off switch, set with /homie. Same package also runs on Claude Code, Codex, and Pi. +

+ 🔗 View Repository +
+
+ +
+ Manage Skills V1 only - Wizard-driven skills management for OpenCode. +
+ Modal-based skill install, remove, list, and update workflow that avoids ANSI prompts while wrapping the skills CLI inside OpenCode. +

+ 🔗 View Repository +
+
+ +
+ Model Announcer V1 only - Model self-awareness +
+ Automatically injects the current model name into the chat context so the LLM is self-aware. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Clarify V2 - Rewrite rough prompts into precise technical prompts +
+ Rewrites rough, plain-language prompts into precise technical prompts with /clarify, /clarify:model, or a -clarify marker before you send them to the model. OpenCode 2 TUI plugin, ported from pi-clarify. +

+ 🔗 View Repository +
+
+ +
+ Opencode Snippets V2 - Instant inline text expansion +
+ Instant inline text expansion for OpenCode. Type #snippet anywhere in your message and watch it transform. Brings DRY principles to prompt engineering with composable, shell-enabled snippets. +

+ 🔗 View Repository +
+
+ +
+ opencode-personality V1 only - A configurable personality and mood system plugin for OpenCode. +
+ Give your AI assistant a distinct personality with customizable moods that drift over time. +

+ 🔗 View Repository +
+
+ +
+ Openskills unverified - Alternative skills manager +
+ Alternative skills management plugin for opencode with enhanced features. +

+ 🔗 View Repository +
+
+ +
+ Plain V2 - Plain-English replies: everyday words, no jargon, no code in explanations +
+ Puts the assistant into plain-English mode. While active, a short ruleset is injected into the system prompt so it explains its work in everyday words and full sentences, with no jargon or acronyms and no code in explanations. On by default in every session; /plain toggles it, with /plain-commit and /plain-review commands for commits and diffs. Small, dependency-free, inspired by caveman - inverted. +

+ 🔗 View Repository +
+
+ +
+ toon-config V1 only - Loads TOON based, AGENTS.toon rather than Markdown +
+ Use TOON based agent instructions. Command to analyize and improve agent instructions. +

+ 🔗 View Repository +
+
+ +
+ TypeUI V1 only - Design systems, UI prompts, and layout variation guidance +
+ Open-source design layer for OpenCode that provides curated design skills, UI prompts, and layout variation guidance so agents can generate more consistent interfaces. Includes an OpenCode setup guide (linked as Docs). +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+➕ Add a Plugin

@@ -1324,7 +2717,7 @@ suggestions. All processing stays local by default — no data leaves the machin
-🎨 THEMES +🎨 THEMES (9)
@@ -1344,7 +2737,6 @@ All 56 theme color keys use shades of gray — no hues anywhere. Designed to mat minimal dark terminal aesthetic. Also available for bat and Ghostty in the same repository. -

🔗 View Repository @@ -1355,7 +2747,16 @@ Also available for bat and Ghostty in the same repository.
A soft, sweet dark theme for Opencode with rich purple tones and carefully tuned syntax and diff colors. Part of the Lavi colorscheme family, which also provides matching themes for Neovim, Alacritty, Ghostty, Kitty, Wezterm, Zellij, and other tools, with Nix flake and home-manager support.

- 🔗 View Repository + 🔗 View Repository +
+
+ +
+ MiMoCode Theme - Warm dark/light OpenCode theme with signature orange accents. +
+ MiMoCode is a warm dark/light theme for OpenCode with signature orange accents, ported from the Zed MimoCode-theme. Dark mode uses warm-black surfaces, light mode uses warm cream surfaces. +

+ 🔗 View Repository
@@ -1377,6 +2778,15 @@ Also available for bat and Ghostty in the same repository.
+
+ opencode-material-theme - Material Design 3 themes for the OpenCode TUI. +
+ Material Design 3 themes for the OpenCode TUI: 194 static JSON themes across 9 variants x 12 hues, plain + OLED. +

+ 🔗 View Repository +
+
+
Poimandres Theme - Poimandres theme
@@ -1396,7 +2806,7 @@ Also available for bat and Ghostty in the same repository.

-➕ Add a Theme via PR +➕ Add a Theme
@@ -1404,9 +2814,11 @@ Also available for bat and Ghostty in the same repository.
-🤖 AGENTS +🤖 AGENTS (21)
+

Agents (14)

+
Agentic - Modular AI agents
@@ -1444,20 +2856,29 @@ Also available for bat and Ghostty in the same repository.
- NERV - Invisible engineering infrastructure for AI agents + Goblin-Logic-Manager - Model-aware OpenCode agent with skill routing, bounded execution, durable closeout, and cold-session recovery.
- Spec-Driven Development pipeline, A2A task delegation hub, persistent semantic memory (MAGI), and 9 specialized subagents for OpenCode. Scaffolds 45+ files via `nerv init` including SDD skills, slash commands, MCP servers, and lifecycle plugins. + A model-expandable OpenCode development-agent system that separates stable development behavior from thin model-specific overlays, with skill routing, bounded waits, evidence-backed verification, durable chunk closeout, and cold-session recovery.

- 🔗 View Repository + 🔗 View Repository
- Opencode Agents - Enhanced workflows + NERV - Invisible engineering infrastructure for AI agents +
+ Spec-Driven Development pipeline, A2A task delegation hub, persistent semantic memory (MAGI), and 9 specialized subagents for OpenCode. Scaffolds 45+ files via `nerv init` including SDD skills, slash commands, MCP servers, and lifecycle plugins. +

+ 🔗 View Repository +
+
+ +
+ Opencode Agents V1 only - Enhanced workflows
A set of opencode configurations, prompts, agents, and plugins for enhanced development workflows.

- 🔗 View Repository + 🔗 View Repository
@@ -1479,17 +2900,130 @@ Also available for bat and Ghostty in the same repository.
+
+ review-pro - Tiered code review - triage picks the relevant specialists, they run in parallel, synthesis returns one verdict +
+ Splits code review into three stages. A triage pass classifies the diff and selects which of thirteen specialist reviewers to dispatch - security, correctness, craft, ai-antipatterns, dry, performance, backend, frontend, a11y, db, api-contract, tests, spec - each with its own rubric and scoped context. The selected reviewers run in parallel, then a synthesis pass dedups overlapping findings, resolves conflicts by domain ownership, calibrates severity, and emits one verdict. Sixteen stack packs add language and framework specific signals from the repository's .review-pro/ directory. +

+ 🔗 View Repository +
+
+ +
+ SEC-AF - Multi-agent security auditor — orchestrates a 250+ agent swarm that proves exploitability, SARIF for CI +
+ Multi-agent security auditor. Orchestrates a 250+ agent swarm to find vulnerabilities and prove they're exploitable — not just flag patterns. SARIF output for GitHub Actions integration. Apache 2.0. +

+ 🔗 View Repository +
+
+
server-manager - Non-blocking background server management — start, track, and stop local dev servers without blocking your AI session.
Start, track, and stop local dev servers in the background — without blocking your AI conversation. Supports Node.js, Python, Go, .NET, Java, Rust, PHP and any framework that runs a dev server. JSON state persistence, per-project log files, HTTP health checks, and log tail/grep for debugging.

- 🔗 View Repository + 🔗 View Repository  •  📖 Docs +
+
+ +
+ StringRay - OpenCode orchestration framework with AI agents +
+ A production-ready orchestration framework for OpenCode with multi-agent coordination, enforcement pipeline, codex compliance, and intelligent task routing. Includes 21 built-in processors, 60+ codex validators, and autonomous reporting. +

+ 🔗 View Repository +
+
+ +
+ SWE-AF - Autonomous software engineering agent team — orchestrates a 400+ agent swarm for planning, coding, testing, and review +
+ Autonomous software engineering agent team. Orchestrates a 400+ agent swarm across the full development lifecycle from a single API call. Apache 2.0. +

+ 🔗 View Repository

-➕ Add an Agent via PR + +

Skills (7)

+ +
+ AwareCode - Documentation-aware coding protocol for OpenCode +
+ A 5-phase meta-skill that enforces documentation-first coding. Scans project docs before writing code, remembers root causes of errors, reviews code quality and security, synchronizes docs after changes, and outputs structured summaries. Designed for OpenCode's skill system. +

+ 🔗 View Repository +
+
+ +
+ iamhumans - Teaches Claude to stop performing empathy and start being present. 99/100 on a 100-case eval. +
+ An opencode skill (~200 lines) that removes sycophancy, lecturing, and performed empathy from Claude's emotional responses. Teaches the shape of human conversation — when to be short, when to sit with something, when the right reply is "oh." Ships with a 100-case eval corpus and a baseline comparison showing +89.4 point skill delta over default Claude (1/20 PASS baseline vs 99/100 with skill). Load for human-shaped conversations (grief, decisions, vent, small talk). Don't load for code generation. +

+ 🔗 View Repository +
+
+ +
+ llm-roundtable - Six models from five vendors vote on choices, plans and PRs when an unattended agent would stop to ask you +
+ Agent Skill plus a stdlib-only Python script (MIT). When an unattended coding agent would stop to ask its user to choose, approve, or review, it convenes a council through each vendor's CLI: Claude Fable and Opus (claude), GPT (codex), Grok (grok), Gemini (agy), and the newest free OpenCode model (opencode, no login needed). Round 1 is blind, round 2 is an anonymous cross-examination (M1..Mn), peers rate each other's evidence 0-2, and a weighted vote decides with no chairman model; an undecided council falls back to a safe default. Seats run read-only and sandboxed. Review mode returns APPROVE/CHANGES/REJECT for plans and PRs. Runs from OpenCode as the host too; --private drops free-model seats that may train on prompts. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ OpenCode Agent Orchestration Kit - Structured product-development workflows +
+ A reproducible OpenCode configuration kit with specialized agents, structured handoffs for research, design, specification, implementation, and review, plus local skills, validation checks, safe installation, and optional design integrations. +

+ 🔗 View Repository +
+
+ +
+ opencode-roundtable - Multi-agent roundtable discussion skill with per-member model routing and meeting minutes +
+ A roundtable discussion (圆桌讨论) skill for opencode — TUI, CLI and Desktop. Pick members one by one via inline cards (role, persona, model — any provider); each member is a real subagent run via opencode run -m provider/model, a neutral host summarizes each round, and on termination a structured meeting-minutes Markdown file is written. Uses only built-in primitives — no plugin required. +

+ 🔗 View Repository +
+
+ +
+ PDCA Skills - PDCA orchestration skills: PLAN → DO → CHECK → ACT with evidence-based verification +
+ A family of four OpenCode skills that drive a task through a PDCA cycle +(PLAN → DO → CHECK → ACT) with transition gates, evidence-based verification, +escalation accounting, durable status, and recovery after compaction. + +- **pdca** — domain-neutral cycle; the task's PLAN selects the means and the verification method. +- **pdca-coder** — stack-agnostic executor for software tasks (code, tests, docs, refactoring, config). +- **pdca-dotnet** — the same cycle tuned for .NET/C# repositories. +- **pdca-collection** — a batch of tasks run as parallel PDCA lanes (worktree per group, `--no-ff` merge of completed groups). + +Roles (planner, coder, check, scout, escalate) are bound by the host, so the +skills stay model- and provider-neutral. +

+ 🔗 View Repository +
+
+ +
+ ShipFrame - AI coding workflows for OpenCode, Claude Code, and Codex +
+ AI coding workflow toolkit with installable OpenCode skills, converted agents, project profiles, release evidence, and disciplined PR/MR workflows. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+➕ Add an Agent
@@ -1497,15 +3031,915 @@ Also available for bat and Ghostty in the same repository.
-🛠 PROJECTS +🛠 PROJECTS (184)
+

Agents (1)

+
- Agent of Empires - Multi-session TUI for OpenCode + Goblin-D.M.T. V2 - Model-agnostic OpenCode runtime for bounded exploration, evidence-driven decisions, and user-gated execution. +
+ An actor-driven OpenCode control runtime that turns model exploration, branching, uncertainty, and tool use into bounded work with lazy skill routing, persistent state, evidence-driven decisions, verification, checkpointing, and user-gated execution. +

+ 🔗 View Repository +
+
+ +
+ +

Skills (10)

+ +
+ Aide - Spec-driven workflow as opencode skills, with a local dashboard that runs specs across projects +
+ Skills (/aide-create, /aide-analyze, /aide-implement, /aide-archive) that write each change as four Markdown files — description, analysis, solution, status — before any code, then implement it test-first. The installer sets the skills up for opencode alongside Claude Code, Codex and GitHub Copilot. A local dashboard queues specs across projects and runs each step headless on the model chosen for it, including opencode's provider/model models, and merges only once the project's tests pass. +

+ 🔗 View Repository +
+
+ +
+ assay - Deterministic QA that drives every control on a web page and reports where it contradicts itself +
+ assay opens a web page in Chromium through Playwright, drives every control it finds, and reports where the page contradicts itself. Runs are deterministic and use no LLM, so the same page gives the same result every time. For opencode you install its skill by copying checking-a-page into .opencode/skills/, and it tells the agent to run assay after it changes a page and report the result. MIT licensed, Python 3.10+, installed from PyPI as assay-ui. +

+ 🔗 View Repository +
+
+ +
+ Claude Learn - Self-improving behavioral playbook plugin for Claude Code +
+ Self-improving behavioral playbook plugin for Claude Code. Captures corrections, failures, and discoveries as scored rules that strengthen or decay over sessions — a closed feedback loop for continuous improvement. +

+ 🔗 View Repository +
+
+ +
+ Comfanion Workflow - AI-assisted development workflow with agents, skills, and semantic search +
+ Complete workflow system for AI-assisted development. Includes specialized agents (analyst, PM, architect, developer), reusable skills, slash commands, semantic code search with local vectorizer, and sprint management with Jira integration. +

+ 🔗 View Repository +
+
+ +
+ growth-architect-foundry - Ad-agency growth ops skill for OpenCode: audits, client reports, ROAS maths, human-approved live writes +
+ Deterministic growth-ops commands for ad agencies (audit, diagnose, EN/AR client reports, COD-aware economics) as an Agent Skill plus AGENTS.md. Live Google/Meta budget or pause changes are enforced in code to need a person typing the campaign key at a terminal, so an agent cannot self-approve. Installs into .agents/skills with one script and is checked against the real OpenCode CLI in CI. +

+ 🔗 View Repository +
+
+ +
+ Hipocampo - Dual memory system with BIRE search for AI agents +
+ A dual-memory system (PostgreSQL + pgvector + Gemini Embeddings) for AI coding agents. Implements the BIRE algorithm (Búsqueda Integrada por Relevancia Expansiva) — unified semantic + lexical search with auto-tagging, hybrid scoring, GIN trigram indexes, and cross-system 768d embeddings. Ships as an opencode skill with SKILL.md, Python scripts, and full DDL schema. +

+ 🔗 View Repository +
+
+ +
+ PPT Design Skill - One-liner PPT generation —40,000+ styles, AI images, fully editable .pptx +
+ AI-powered PPT generation skill for OpenCode, Claude Code, Codex, Cursor, and 13+ AI coding platforms. Three modes: FreeStyle (one-liner quick generation), Build Script (pixel-perfect delivery with python-pptx), and VI Build (enterprise template compliance). Features 40,000+ style combinations via natural language (--style "dark cyberpunk"), 5 AI image engines (Seedream/GPT Image/DALL-E/Wanx/Kimi), 10 diagram types, 28 design quality upgrades, advanced effects (3D shapes, gradient text, frosted glass, morph transitions), and CJK font support. Outputs fully editable .pptx files directly —356x faster than HTML-to-screenshot approaches. Includes a component library with 5,500+ SmartArt/GroupShape templates and one-command installation for all platforms. +

+ 🔗 View Repository +
+
+ +
+ Professor - Fleet-boost discipline layer for Claude Code, Codex & OpenCode agents +
+ An LLM-harness fleet boost framework that turns your AI coding agents into a disciplined engineering team you can see, message, and hold to the rules. Ships a compiled .opencode/ layer (agents, commands, skill symlinks, opencode.jsonc with pinned denies) generated from its Claude sources, plus pfm, a Go CLI/TUI that lists OpenCode chats alongside Claude Code and Codex sessions. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ SDLC-Assist - SDLC phase router skill - infers the phase from the repo, asks one question, hands off +
+ Agent skills that tell opencode which SDLC phase a request is in (analysis, planning, development, testing, deployment) from what the repo already contains, show the evidence, ask one confirmation and route to spec-driven-development, a QA gate and a release skill. Node only, no dependencies. +

+ 🔗 View Repository +
+
+ +
+ UIZZE - UI quality workflow for OpenCode with an optional authenticated MCP +
+ Help OpenCode avoid generic UI with a free anti-UI-slop Agent Skill and an optional authenticated UIZZE MCP for focused UI references from 800,000+ real web and iOS screens. +

+ 🔗 View Repository +
+
+ +
+ +

MCP Servers (28)

+ +
+ /call-me - Let OpenCode ring your iPhone, read you a question and return your spoken answer +
+ A hosted remote MCP server for OpenCode. The agent can ring your iPhone, read a question or status update aloud, and get your spoken reply back as text, or send you a text and wait for your answer. Useful when a long session needs a decision while you are away from the keyboard. Needs the /call-me iPhone app, which gives you the number the agent calls. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Agent Nexus - Remote MCP registry of 700+ APIs, MCP servers and CLIs, each live-probed so agents pick tools that actually work +
+ Remote MCP server and discovery registry for AI agents. Every entry (APIs, MCP servers, CLIs) is continuously probed for liveness, capability and response schema, so an agent can search, compare and pick a tool based on live evidence instead of a README. Agents can also follow an entry and get alerted when it goes down or changes shape. Works with opencode via remote URL (https://agentnexus.app/api/public/mcp, free tier without key) and publishes a ready-to-use config at https://agentnexus.app/.well-known/opencode. +

+ 🔗 View Repository +
+
+ +
+ Agent QA - The self-improving QA agent for software teams +
+ Open-source QA harness for authoring and running natural-language web and mobile tests, with persistent memory, self-healing, a dashboard, Agent Skills, and an MCP server. Configure its `agent-qa mcp` command in OpenCode to expose tools for creating, executing, inspecting, triaging, and repairing tests. +

+ 🔗 View Repository +
+
+ +
+ AgentDeals - MCP server aggregating free tiers, credits, and referral codes across 1,500+ developer tools +
+ Remote MCP server that surfaces free tiers, credits, trials, and referral codes for developer infrastructure — Railway, Vercel, Fly, OpenAI, Anthropic, and 1,500+ other vendors. Exposes four tools (search_deals, plan_stack, compare_vendors, track_changes) so an agent can find the cheapest way to ship a given stack. Works with opencode via remote URL (https://agentdeals-production.up.railway.app/mcp). Also tracks pricing changes over time. +

+ 🔗 View Repository +
+
+ +
+ ax - Local telemetry graph for AI coding agents +
+ Local-first telemetry and taste graph for AI coding agents. Ingests OpenCode, Claude Code, Codex, Cursor, and Pi session data plus OTLP, then exposes recall, cost, skill/hook usage, churn, and workflow-extraction views through a CLI, dashboard, and MCP server. +

+ 🔗 View Repository +
+
+ +
+ Cortex - Codebase intelligence engine for coding agents via MCP +
+ Indexes your project into a structured knowledge graph of files, symbols and dependencies using tree-sitter AST parsing, and exposes it to OpenCode over MCP. Includes semantic search, dependency-graph context engine, architecture analysis, persistent project memory, task planning, and specialized agents (architect, reviewer, security, tester) producing unified reports. TypeScript, Node 22+, MIT. +

+ 🔗 View Repository +
+
+ +
+ db-semantic-mcp - Read-only PostgreSQL and SQL Server schema context for OpenCode agents +
+ A local MCP server that gives OpenCode agents table and column metadata, database comments, bounded sample data with redaction controls, and optional semantic schema search. Supports PostgreSQL and SQL Server without arbitrary SQL execution or a vector database. +

+ 🔗 View Repository +
+
+ +
+ Dialbot MCP - Local MCP browser control for OpenCode with an unpacked Chrome extension +
+ Control Chrome tabs from OpenCode through a local stdio MCP server and a Chrome Manifest V3 extension. Includes fast DOM and selector actions, plus visual screenshot, mouse and keyboard control. Also works with Pi and other MCP stdio clients. +

+ 🔗 View Repository +
+
+ +
+ dsh-skills-anywhere - Serve the skills installed for 60+ agents to OpenCode over MCP, zero copies +
+ MCP server that reads the Agent Skills (SKILL.md) already installed for OpenCode, Claude Code, Codex, Cursor, Gemini CLI and 60+ other agents, plus Claude Code plugin marketplaces and any GitHub skills repo, and exposes them as find_skills/open_skill tools and skill:// resources without copying or symlinking. +

+ 🔗 View Repository +
+
+ +
+ Employed by Guaq AI - Live job search MCP server and skills for OpenCode, from about 5,000 verified employer ATS boards +
+ Remote MCP server plus Agent Skills for searching live job postings read from employers' own applicant-tracking systems, researching an employer's hiring and tracking applications. Signs in with OAuth through opencode mcp auth, so no API key is needed. Every result links to the employer's own apply page. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ GoodMemory - Local-first, auditable memory for OpenCode through MCP +
+ Gives OpenCode durable user and project memory across sessions through a standalone MCP server. Uses SQLite by default, keeps recall inspectable, and makes memory writes opt-in. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Kranz - Inspect and control live development services from OpenCode over MCP +
+ Kranz runs local development stacks with a terminal UI and CLI. Its built-in stdio MCP server lets OpenCode inspect services, readiness, logs, ports, actions, and run history, then perform authorized lifecycle operations against the same live runtime. The companion kranz-services Agent Skill teaches the agent to reuse existing runtimes and preview scoped changes. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Lians - Local-first memory for OpenCode and any MCP-compatible AI agent +
+ Gives OpenCode durable memory across chats through its native MCP support. Ships a ready-to-copy OpenCode configuration and five-tool starter profile for remembering, recalling, inspecting, correcting, and explicitly erasing local memory. No Lians account, API key, model download, or cloud service is required; memory stays in a local SQLite database and can be shared with other compatible agents. +

+ 🔗 View Repository +
+
+ +
+ magents - Read, hand off to, message, and spawn OpenCode, Claude Code, Codex, Cursor, and Gemini sessions from one MCP server +
+ Rust MCP server and CLI over the session files coding agents already write. From OpenCode you can list and read other live sessions, search transcripts, hand off compact state into another chat, send into a specific session, or spawn an independent headless session that replies through a shared inbox. Reads OpenCode's session database directly; `magents install --all` registers the MCP server in opencode.json and adds the magents skill. Homebrew, APT, binaries, and Docker. MIT licensed. +

+ 🔗 View Repository +
+
+ +
+ Mnemoverse - MCP memory server that re-ranks recall from reported outcomes, backed by a hosted engine +
+ MIT-licensed MCP server for agent memory, backed by a hosted engine that re-ranks recall from reported outcomes rather than similarity alone. OpenCode can use it as a local MCP server (npm `@mnemoverse/mcp-memory-server`) or as a remote MCP server at https://mcp.mnemoverse.com/mcp with OAuth sign-in, and the same memory is shared with Claude Code, Cursor, VS Code, and ChatGPT. The engine is hosted and needs a Mnemoverse account, with a free tier. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ myc - Local task queue and decision memory for coding agents, wired into opencode with one command +
+ A local task-and-memory layer for coding agents (opencode, Claude Code, Codex, Kimi). One SQLite file next to the repo holds a task queue with dependencies, blockers and atomic claims, an oplog of decisions with hybrid search, and a code index; `myc wire` installs the opencode plugin and MCP server. No network calls of its own, no API key, MIT. +

+ 🔗 View Repository +
+
+ +
+ Opencode Chat Export - MCP server to export chat history to Markdown +
+ MCP server that exports OpenCode chat history to Markdown files with tool calls, reasoning, and cost summaries. Export current session, specific sessions by ID, or bulk exports. pip installable. +

+ 🔗 View Repository +
+
+ +
+ Openhook - Give OpenCode a callback inbox to test webhook integrations through MCP. +
+ Open-source callback inbox with a hosted Streamable HTTP MCP endpoint and an OpenCode setup recipe. Create a disposable inbox, wait for a webhook, inspect the received body and headers, then clean up the test inbox. Private per-inbox tokens control access to captured events. Also supports email and DNS capture, with self-hosting available. +

+ 🔗 View Repository +
+
+ +
+ PatchWarden - Local-first MCP safety layer for OpenCode and other AI coding agents +
+ PatchWarden is a local-first MCP safety and verification layer for AI coding agents. It provides workspace confinement, command allowlists, scope-violation detection, and auditable task evidence for OpenCode and other MCP clients. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ PickySteve - Local skill router and context picker for coding agents +
+ A cheap local model routes each prompt to the right skill via hybrid retrieval (BM25 + embeddings, RRF-fused) with cross-encoder reranking and an LLM judge, then assembles a minimal context bundle for the execution model. Runs fully offline on local Ollama by default and ships a fail-closed prompt-injection gate (ONNX classifier) that scans both requests and retrieved documents. Exposes an MCP stdio server and an OpenAI-compatible proxy, with a one-command installer wiring 18 coding agents including Claude Code, Cursor, and OpenCode. +

+ 🔗 View Repository +
+
+ +
+ PriceWin - Remote MCP server and skill for live hotel and flight prices across Booking.com, Agoda, Trip.com and Traveloka +
+ Compares live hotel and flight prices in USD across Booking.com, Agoda, Trip.com, Traveloka and Google Flights through one remote MCP server (https://mcp.price.win/mcp, no account or API key). Add it to opencode.json as a remote MCP server and copy the bundled pricewin-travel-search skill to ~/.agents/skills, which OpenCode loads automatically. Results name their source and link to it for booking. +

+ 🔗 View Repository +
+
+ +
+ SCVD General Store - Skills and MCP tools for checking x402 endpoints before payment and signed receipts afterward +
+ An evidence observatory for agentic commerce with portable skills and a remote MCP service. OpenCode can load the verification skill and run a free endpoint preflight without a wallet or API key. Guidance covers signed-receipt checks and the limits of unpaid observations. Optional paid observations require an explicit spending decision; installation grants no payment authority. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ semantic-search-mcp - Semantic code search MCP server - find code by meaning across thousands of files +
+ Adds semantic code search to OpenCode. Find code by meaning across 6,900+ files in 2 seconds. 100% local 80MB model (bge-small-en-v1.5), zero API calls. Function-level extraction for PHP, JS, TS, Python, Go, Rust, Java. Hybrid scoring (70% embedding + 30% keyword), TUI config wizard, live progress bar, per-project caching. +

+ 🔗 View Repository +
+
+ +
+ showagent - Browse OpenCode history and copy conversation messages between coding agents. +
+ A terminal picker, CLI, and MCP server for local coding-agent sessions. Browse OpenCode sessions alongside Codex, Claude Code, Gemini CLI, jcode, and Pi; preview message transfers and create new native sessions. OpenCode operations use the installed OpenCode CLI. Transfers preserve original sessions and copy extracted user and assistant messages, excluding tool and runtime state. +

+ 🔗 View Repository +
+
+ +
+ SpringBrand - Remote MCP server with go-to-market tools for agents +
+ Hosted remote MCP server that gives OpenCode go-to-market tools: social +listening, traffic and SEO research, lead discovery, and creator discovery. + +Exposes five tools — search_tools, get_tool_schemas, execute_tools, +manage_connections, and get_execution — so the agent discovers and calls +capabilities on demand instead of loading every tool schema into context. + +Transport is Streamable HTTP. Auth is OAuth 2.1 with Dynamic Client +Registration (RFC 7591) and PKCE, which OpenCode handles automatically on the +first 401, so no API key goes in the config file. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Stacktree - Publish HTML from your agent to a private, unguessable link +
+ Turns HTML an agent produced into a link a person can open — a report, a dashboard, a brief. Links are unguessable and uncrawlable by default, with an optional passcode and expiry, and republishing replaces the page in place so a shared URL stays current. Connects as a local MCP server, and the skill is fetchable over HTTP so it stays current without reinstalling. Free anonymous pages need no account at all; agents with a wallet can pay per page over x402 instead of signing up. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ SuperLocalMemory - The governed memory brain for every AI agent. It lives on your machine. +
+ Local-first memory for AI agents, added to OpenCode as an MCP server in opencode.json. It recalls what was saved, keeps it true over time, and answers that it does not have the answer instead of guessing. +

+ 🔗 View Repository +
+
+ +
+ Wuniq - Local-first structured project memory for OpenCode through MCP +
+ Connects OpenCode to the free Wuniq desktop app through @wuniq/mcp. Wuniq keeps decisions, constraints, intent, and human reasoning in .wuniq files beside project files, then exposes progressive read and sync tools to the model. The public repository includes a validated opencode.json setup and AGENTS.md workflow. No account, cloud storage, or telemetry. +

+ 🔗 View Repository +
+
+ +
+ +

Clients & GUIs (57)

+ +
+ Agent of Empires - Multi-session TUI for OpenCode
A terminal UI for managing multiple OpenCode sessions in tmux with git worktree integration and Docker sandboxing.

- 🔗 View Repository + 🔗 View Repository +
+
+ +
+ Agent Sessions - Local OpenCode session-history browser +
+ Local-first macOS app for browsing and full-text searching OpenCode session history. It reads local OpenCode SQLite history in read-only mode, opens old runs as readable timelines, and can resume sessions where the OpenCode CLI supports it. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Agent Workbench - Local web UI for OpenCode and three other agent CLIs, with one shared history +
+ Runs OpenCode through its own opencode serve process, next to Claude Code, Codex and Antigravity CLI, each in a browser tab. Shows OpenCode sessions as conversation cards read from its database in read-only mode, lets you answer its questions and see its permission waits from the UI, hands a conversation over to another CLI and searches across all of them. Never opens auth.json or opencode.json, no telemetry. +

+ 🔗 View Repository +
+
+ +
+ agent-manager - Terminal UI that runs OpenCode and other coding-agent CLIs side by side in persistent tmux sessions +
+ Terminal UI that runs OpenCode alongside Claude Code, Codex and other coding-agent CLIs, each in its own persistent tmux session. It launches the installed OpenCode CLI unmodified, so login, config and MCP servers carry over. One list shows every session's live status, prompts go into a pane without attaching, a session can spawn into its own git worktree, and a full-file diff review sends line comments back to the agent. Runs on macOS, Linux and Windows via WSL2. Apache-2.0. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ agenttrace - Local TUI for OpenCode session cost, health, and trace reports +
+ Local-first Bubble Tea TUI and report CLI for inspecting OpenCode and other AI coding-agent logs with cost, tokens, latency, tool failures, anomalies, health gates, diffs, and reports. +

+ 🔗 View Repository +
+
+ +
+ AionUi - Free, open-source multi-agent desktop client that gives OpenCode (and other CLIs) a GUI. +
+ Cross-platform (macOS/Windows/Linux) desktop app that wraps OpenCode and other agent CLIs in a chat-based GUI. Supports any API key and multiple LLM providers with API-key polling, multi-session and multi-agent workflows, MCP and ACP protocols, file management and preview, code diff view, scheduled tasks, local data storage, and remote WebUI access. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Calyx - Native macOS terminal for running and supervising OpenCode and other coding agents in parallel +
+ Calyx is an MIT-licensed native macOS terminal built on libghostty. It runs OpenCode alongside Claude Code, Codex, Hermes, Grok, and pi in parallel panes, shows each agent's status and subagents in a sidebar, lets you review diffs and send line comments back to the OpenCode pane, and provides a built-in MCP server for cross-pane messaging. +

+ 🔗 View Repository +
+
+ +
+ Caprock - Local dashboard showing OpenCode sessions next to Claude Code and Codex, with cost per repository +
+ Reads OpenCode's own database read-only and shows its sessions on the same screens as Claude Code, Codex and DeepSeek Harness, with an all/opencode filter. Costs are shown as OpenCode reports them. Searchable history, single Go binary, no telemetry. +

+ 🔗 View Repository +
+
+ +
+ Chronotile - Local usage analytics dashboard for OpenCode — cost, tokens, models, agents, tools, and sessions +
+ Native desktop app (Tauri 2, Rust backend, React UI) that turns OpenCode's local SQLite history into a dashboard — spend, token breakdown including reasoning and cache, per-model, per-agent, per-tool and per-skill analytics, project and file activity, quota burn rate, a full-year spend heatmap, and a session browser with full transcripts. OpenCode records $0 for subscription and OAuth-plan traffic, so Chronotile also estimates cost from models.dev rates and shows reported and estimated figures side by side. Databases are opened read-only, an incremental rollup cache keeps queries instant on multi-gigabyte histories, and no usage data ever leaves your machine. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Claudescope - Local, read-only web UI to browse, search, and analyze OpenCode (and other agents') sessions +
+ Local-first CLI that serves a web UI to browse, read, search, and analyze AI coding-agent transcripts — OpenCode sessions alongside Claude Code, Codex, Junie, pi, and Copilot CLI. Sessions are merged by working directory; includes DuckDB full-text search and token-cost analytics. Read-only and cross-platform, distributed as a single npm package (MIT). +

+ 🔗 View Repository +
+
+ +
+ ClawMetry - Zero-config observability dashboard for OpenCode and 20+ agent runtimes +
+ Local web dashboard that auto-detects OpenCode session history and shows live sessions, token usage, costs, tool calls, and transcripts alongside 20+ other agent runtimes. One pip install, no configuration. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ CodeWalk - Native cross-platform Flutter client for OpenCode server mode +
+ A fast, native Flutter client for OpenCode server mode with realtime streaming chat, speech-to-text on all platforms, multi-server profiles, model selection, and a Material 3 responsive UI for Linux, macOS, Windows, Web, and Android. +

+ 🔗 View Repository +
+
+ +
+ Crit - Review OpenCode plans and diffs in a local browser UI and send comments back to the agent. +
+ Crit opens agent plans, code diffs, HTML artifacts and a running dev server in a browser review UI. You leave inline comments and they go back to the agent as structured feedback. Ships an OpenCode plugin (v1 and v2) and skills. Runs locally as a single binary. +

+ 🔗 View Repository +
+
+ +
+ Deck - Local cockpit for OpenCode-powered autonomous agents with secure sandboxes and live desktop visibility. +
+ Open-source desktop cockpit that runs OpenCode-integrated agents in isolated Docker sandboxes with chat plus live noVNC desktop monitoring, tool permission controls, and a Pilot bridge suite for orchestrating agents from Telegram, Slack, WhatsApp, and more. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ dotpals - A desktop pal and notch that shows what your OpenCode sessions did, in plain words +
+ An open-source desktop companion that follows OpenCode through an OpenCode plugin and integrates with Claude Code, Codex, Cursor, Gemini CLI, and Copilot CLI through their respective hooks or local logs. Each request becomes a few readable with a live view of the file being edited in a notch at the top of the screen, and flags for .env changes, force-pushes and two agents editing the same file. Runs locally, no telemetry. +

+ 🔗 View Repository +
+
+ +
+ Duplex - A browser shared by a human and an AI — same tabs, same live session +
+ Electron desktop browser with a bundled stdio MCP bridge (24 tools — snapshot, click, type, screenshot, tabs, annotations) plus an opencode mirror plugin that streams session events into a side panel and injects panel messages back into the same session. Built-in multi-protocol model support (OpenAI / Anthropic / Responses / Gemini) and an Esc takeover for the human. +

+ 🔗 View Repository +
+
+ +
+ Handy - Speech to Text +
+ Easy Open Source Speech to Text. +

+ 🔗 View Repository +
+
+ +
+ Heym - Visual AI workflows with OpenCode coding agents and Go usage tracking +
+ Heym is a source available AI workflow platform you can self host. Its OpenCode Go node runs the OpenCode CLI against GitHub repositories and can return patches or open pull requests. It also provides native OpenCode Go credentials, live model selection, and subscription usage tracking. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Infiknit - Local stdio launcher for Infiknit desktop image and video canvas workflows +
+ Connect OpenCode to Infiknit on this computer. Generate images and videos into a project or build canvas workflows. Keep Infiknit open. Cloud agents cannot reach it. Official registry io.github.Synthenova/infiknit. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ intentic - Self-hosted browser workspace that runs OpenCode agents in parallel sandboxes +
+ A browser workspace for running coding agents on hardware you own, with OpenCode connected over ACP as a chat provider. Each agent gets its own Docker sandbox and git worktree, terminals survive disconnects, any browser or phone reopens the same fleet, and every change is reviewed as a per-file, per-hunk diff before it lands. +

+ 🔗 View Repository +
+
+ +
+ Ivy Tendril - AI coding orchestrator with plan-based lifecycle and verification gates +
+ Open-source desktop app that orchestrates OpenCode, Claude Code, Codex, Antigravity, and Copilot through a structured plan-based lifecycle. Features verification gates, self-improving memory, human-in-the-loop checkpoints, and git worktree isolation. Local-first, agent-agnostic, stack-agnostic. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ JustSessions - Native Mac workspace for finding, reading, and resuming OpenCode sessions. +
+ Groups OpenCode and other coding-agent sessions by project, with searchable conversation history and embedded terminals that preserve the original CLI. Requires macOS 14 or later, Apple Silicon, and an installed, authenticated CLI. +

+ 🔗 View Repository +
+
+ +
+ Kimaki - Discord bot controller +
+ A Discord bot to control opencode sessions on any computer via Discord. +

+ 🔗 View Repository +
+
+ +
+ LoopTroop V1 only - Local GUI orchestrator for autonomous AI coding using multi-model planning councils and isolated worktrees +
+ Local-first, open-source GUI orchestrator that runs long-running AI coding tickets end-to-end. An LLM Council plans the work, tasks are decomposed into atomic units (Beads) executed in isolated git worktrees, and a Ralph Loop recovers from errors with a fresh context. Built on OpenCode. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ MCP Voice Interface V1 only MCP - Talk to AI assistants +
+ Talk to AI assistants using your voice through a web browser. Compatible with Claude Desktop and opencode. +

+ 🔗 View Repository +
+
+ +
+ MiMo-Code - Voice-driven multimodal desktop coding agent for MiMo +
+ A native desktop coding agent for the MiMo model family — Windows & macOS, no TUI — built on the OpenCode harness and adapted to be MiMo-first. Adds native multimodal understanding (image, PDF, video) plus voice dictation (ASR) and speech synthesis (TTS), with cost-aware model selection. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ NextProb - Desktop notebook for vibe-coded websites, edited by your local AI coding-agent CLI (OpenCode and others) +
+ Electron desktop app that turns a workspace folder of plain .html files into an AI-editable notebook. Agent-agnostic — edit notes with OpenCode or any other agent CLI in an embedded terminal. Notes are real HTML pages. Each note is a self-contained folder that can include a SQLite database, key/value store, attached files, and scripts — so it can grow from a static page into a sortable table, interactive dashboard, or research tool. +

+ 🔗 View Repository +
+
+ +
+ OC Manager - Metadata TUI +
+ Terminal UI for inspecting, filtering, and pruning OpenCode metadata stored on disk. +

+ 🔗 View Repository +
+
+ +
+ oc-monitor - Real-time terminal dashboard for tracking OpenCode session costs and usage. +
+ A terminal UI (built with Go and Bubble Tea) that reads your local OpenCode SQLite database to show live session activity, burn-rate charts, and cost breakdowns by agent, model, and project. Includes daily/hourly usage trends with a calendar heatmap, per-session token and tool-call inspection, full-text search across sessions, and JSON export. All data stays local — the only network call is an optional lookup to models.dev for model context-window sizes. +

+ 🔗 View Repository +
+
+ +
+ Octto V1 only - Interactive browser UI for AI brainstorming +
+ Interactive browser UI for AI brainstorming with multi-question forms, parallel exploration branches, and visual feedback. +

+ 🔗 View Repository +
+
+ +
+ Open Agent - Self-hosted control plane +
+ Self-hosted control plane for OpenCode agents with isolated Linux workspaces (systemd-nspawn), git-backed Library configuration, and multi-platform dashboards (Next.js web, SwiftUI iOS). +

+ 🔗 View Repository +
+
+ +
+ Open Dispatch - Control agents from Slack, Teams, or Discord — locally or via Fly.io Sprites +
+ Bridge app connecting chat platforms (Slack/Teams/Discord) to AI coding assistants. Run agents locally or spin up isolated Fly.io Sprites for parallel execution. Supports 75+ AI providers via OpenCode, Claude CLI, real-time output streaming, session persistence, and smart message routing. +

+ 🔗 View Repository +
+
+ +
+ OpenChamber V2 - GUI for OpenCode +
+ A fan-made web and desktop interface for OpenCode with VS Code extension, multiple sessions, and git worktrees management. +

+ 🔗 View Repository +
+
+ +
+ OpenChamber Design Studio - Open, local alternative to Claude Design inside OpenChamber +
+ An OpenChamber extension that turns design work into a chat loop. It opens your running app in a real Chrome window beside the conversation; Cmd/Ctrl-click any element to attach it to the chat as a reference (selector, markup, computed styles), and the agent edits the real project while the preview reloads. Ships Design Mode (/design), per-project harness plugin, DESIGN.md / tokens.css authority with a vendored design-system preset catalog, project scaffolding, and a .design-studio.json project config. MIT, install from a git URL via Settings → Extensions. +

+ 🔗 View Repository +
+
+ +
+ OpenClient - Native iPhone and iPad companion for self-hosted OpenCode servers +
+ Native SwiftUI client for browsing projects, resuming sessions, streaming chat, handling permission and question prompts, and following active work through Live Activities and widgets. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ OpenCode Dashboard - Single-file live token usage dashboard with zero dependencies +
+ A live usage dashboard served by one Python file — no framework, no build step, no dependencies. Token-first views of sessions, models, projects, tokens by changed file/subsystem, tokens per git commit, and a 52-week activity heatmap, with click-to-filter and JSON/CSV export. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Mobile V2 - Your OpenCode workflow in your pocket. Manage AI coding agents from Android and iOS. +
+ OpenCode Mobile is a free, open-source, community-built companion app for OpenCode on Android and iOS. Connect to your self-hosted OpenCode server to start coding sessions, monitor agent progress, approve permissions, review code changes, browse files, access the terminal, and manage projects and AI models directly from your phone. Optional secure remote connectivity lets you stay connected to your development environment from anywhere, while your code and workloads remain on your own computer. No cloud-hosted development environment required. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Mobile - Android client for OpenCode — drive your self-hosted agent from your phone +
+ Free, open-source (MIT) Android app that connects to an opencode server you run yourself. Stream coding sessions in real time, review file diffs, and approve tool calls from your phone. Install via the F-Droid repo or a signed APK. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Opencode Neovim - Neovim plugin +
+ Neovim plugin for making convenient editor-aware prompts. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Sentry - Android companion: scan-to-pair live OpenCode console + screen-off alerts over Tailscale +
+ The Android companion for OpenCode. Scan one QR printed by the self-hosted bridge and the official web console opens in-app: watch every session live, send prompts, follow reasoning, tool runs and streaming output, switch models — all directly over your own Tailscale network. A foreground service also rings, vibrates and speaks when a task finishes, needs permission, asks a question or fails, with a three-layer keep-alive (accessibility keeper, persistent Job, exact-alarm watchdog) that survives aggressive vendor-ROM clean-ups. Everything stays on your own tailnet — no third-party server. Not affiliated with the OpenCode team. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Sidebar V1 only - Tmux sidebar for managing OpenCode sessions +
+ A tmux-backed sidebar launcher for OpenCode that keeps the session list, preview pane, and OpenCode TUI together in one workspace. It supports session recall, background sessions, search, project folders, deletion, and sound notifications. +

+ 🔗 View Repository +
+
+ +
+ Opencode Telegram Bot V2 - Telegram bot client for OpenCode CLI +
+ Run and monitor AI coding tasks from your phone while everything runs locally on your machine. +

+ 🔗 View Repository +
+
+ +
+ Opencode Web V1 only - Browser-based access +
+ Web interface for opencode - browser-based access to AI coding agent. +

+ 🔗 View Repository +
+
+ +
+ opencode-kanban - Kanban-style task management for opencode +
+ Kanban tool that allows you to stay in terminal. +

+ 🔗 View Repository +
+
+ +
+ OpenMate - Offline-first Android client for OpenCode, connect from anywhere +
+ Native Android (Kotlin/Compose) client for a self-hosted opencode server. Connects over your local network or automatically through a cloud relay, so you can reach your agent from anywhere. A lightweight Bridge streams incremental, seq-based sync from opencode's own database into a local copy on your phone, so you can read and reply to sessions offline. Supports opencode v2 only. +

+ 🔗 View Repository +
+
+ +
+ OpenTab - Terminal UI for browsing your OpenCode spend by month, day, project, session, and model +
+ A terminal UI that reads OpenCode's local SQLite database (read-only) to show where your tokens and money went — by month, day, project, session, and model, with spend-over-time trends and drill-down into your most expensive sessions (model mix and subagent costs included). Standard-library Python only, offline by default. Also reads Claude Code, Codex, the Copilot CLI, and more. +

+ 🔗 View Repository +
+
+ +
+ OpenWork V1 only - Desktop GUI for OpenCode workflows +
+ Open-source alternative to Claude Cowork built on top of OpenCode. Provides a polished desktop UI for sessions, skills, plugins, and templates. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Orkas - Local-first multi-agent desktop workspace with OpenCode orchestration +
+ Orkas is an open-source desktop AI workforce whose Commander coordinates specialist agents and can run OpenCode alongside Claude Code, Codex, and Cline from one chat. Conversations, files, agent configurations, and model keys stay local. +

+ 🔗 View Repository +
+
+ +
+ P4OC (Pocket for OpenCode) - Android client for OpenCode +
+ Native Android app for controlling OpenCode from your phone. Chat with AI, manage sessions, browse files with syntax highlighting, view diffs, and use an embedded terminal — all styled with a terminal UI aesthetic. Available on Google Play. +

+ 🔗 View Repository +
+
+ +
+ Parallel Code - Orchestrate multiple AI coding agents simultaneously +
+ Desktop app for orchestrating multiple AI coding agents (Claude Code, Codex CLI, Gemini CLI) simultaneously in isolated git worktrees. Run agents in parallel, each in their own branch, and merge results when ready. +

+ 🔗 View Repository +
+
+ +
+ qwen-audio-agent - Full-duplex voice runtime for OpenCode and other ACP agents +
+ Realtime full-duplex voice interface that connects to OpenCode natively over ACP, with one-click install and DashScope configuration. Conversations keep going while OpenCode runs tasks in the background, and task results flow back into the same voice conversation. Also supports Claude Code, Codex, Kimi Code, and more. Ships a macOS desktop app, terminal TUI, and web UI. +

+ 🔗 View Repository +
+
+ +
+ Ritemark - Markdown writing app for macOS and Windows where OpenCode works directly in your local documents. +
+ Open-source (MIT) desktop writing app with a visual editor for plain Markdown files in a folder on your computer. OpenCode, with your own API keys, is one of its built-in agents (beside Claude Code and Codex) and edits the documents in place, with a built-in terminal beside the document. Each window is one folder with its own conversations, AGENTS.md, agents and skills. Mermaid and draw.io diagrams, and export to Word and PDF. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Solenta - Desktop app for OpenCode and other coding agents with one shared local memory +
+ A local-first desktop app (macOS, Windows, Linux) that runs OpenCode, Claude Code, Codex, Cursor, Kimi and Grok threads in git worktrees. A local memory server is injected into every session over MCP, so what one thread learns the next one knows; the plan is your GitHub issues, with Git review, terminal and browser panes, and verify-gated completion. +

+ 🔗 View Repository +
+
+ +
+ swe-mux - Run OpenCode sessions side by side with a status each, and on your phone over Tailscale +
+ Terminal multiplexer for coding agents. Runs OpenCode (plus Claude Code, Codex and pi) in real terminals on your own machine, shows which session is waiting on you, and serves the same live sessions to your phone over your own Tailscale network. Sessions survive app restarts and updates. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ TelegramCode - Telegram bot for OpenCode and Claude Code, run coding agents from your phone +
+ Run your coding agents on your own machine or VPS and drive them from Telegram, by voice or text. Each forum topic is its own project session, like terminal tabs on your phone. Self-hosted, no open ports, MIT. +

+ 🔗 View Repository +
+
+ +
+ Vibe Kanban - Manage AI in parallel +
+ A Kanban board to manage and orchestrate AI coding agents in parallel. +

+ 🔗 View Repository +
+
+ +
+ VSC OpenCode GUI - The opencode agent, native in VS Code - chat in an editor tab instead of a terminal +
+ A VS Code extension that runs the opencode agent in an editor tab with command-palette parity and full theme sync. It spawns a headless `opencode serve` and drives it with its own webview UI over HTTP/SSE - feature parity with the opencode app, without leaving the editor. +

+ 🔗 View Repository +
+
+ +
+ +

Tools & Utilities (85)

+ +
+ Agent Run Inspector - Local, read-only reports for OpenCode session exports - repeated tool calls, failures, completion +
+ Generates a self-contained HTML (and JSON) report from `opencode export <sessionID>` data: repeated identical tool calls, recovered vs unresolved failures, completion state, and tool/usage statistics. Python standard library only, no network calls, and the input file is never modified. Tested with OpenCode 1.18.x; other versions are best-effort with an explicit note in the report. The tool itself is a paid download (USD $49 individual / $149 team); the linked repository contains the documentation, screenshots, and a free sample pack of synthetic inputs and example reports. +

+ 🔗 View Repository +
+
+ +
+ Agent Teams AI - Multi-team control plane for OpenCode and other coding agents +
+ Open-source orchestration platform for autonomous coding-agent teams with first-class OpenCode support. Agents manage Kanban tasks, message each other, review work, and coordinate across teams while users steer with high-level commands. Also supports Codex, Claude Code, Cursor, Grok, GitHub Copilot, Kiro, and other providers. +

+ 🔗 View Repository  •  📖 Docs
@@ -1523,34 +3957,115 @@ Also available for bat and Ghostty in the same repository.
A Node.js CLI for discovering, curating, staging, activating, and wiring reusable AI-agent assets into developer workspaces, including OpenCode.

- 🔗 View Repository + 🔗 View Repository  •  📦 npm
- AgentDeals - MCP server aggregating free tiers, credits, and referral codes across 1,500+ developer tools + agent-historian - Search and read past AI coding-agent sessions from the CLI
- Remote MCP server that surfaces free tiers, credits, trials, and referral codes for developer infrastructure — Railway, Vercel, Fly, OpenAI, Anthropic, and 1,500+ other vendors. Exposes four tools (search_deals, plan_stack, compare_vendors, track_changes) so an agent can find the cheapest way to ship a given stack. Works with opencode via remote URL (https://agentdeals-production.up.railway.app/mcp). Also tracks pricing changes over time. + A read-only CLI (ochist) plus an Agent Skill so OpenCode and other agents can search and re-read their own past conversation history before redoing research. Reads transcripts the agents already persist locally — no memory layer, embeddings, index, daemon, or network. Project- or global-scoped, subagent-aware, zero runtime dependencies.

- 🔗 View Repository + 🔗 View Repository
- agenttrace - Local TUI for OpenCode session cost, health, and trace reports + agent-sessions - Share OpenCode, Claude Code and Codex sessions with your team through git
- Local-first Bubble Tea TUI and report CLI for inspecting OpenCode and other AI coding-agent logs with cost, tokens, latency, tool failures, anomalies, health gates, diffs, and reports. + Push the current OpenCode session into the repo as a redacted transcript plus a handoff summary under .claude/sessions/, and pull teammates' sessions from any coding agent straight into your chat. Ships as an Agent Skills skill that OpenCode loads from ~/.agents/skills, plus a Claude Code plugin and a CLI on PyPI (agent-sessions-cli).

- 🔗 View Repository + 🔗 View Repository
- Beads - Project task management + AgentBox - Run multiple coding agents in parallel, each in its own sandboxed VM +
+ Run OpenCode, Claude Code, and Codex in parallel — each teleported into its own sandboxed VM (local Docker, self-hosted, or cloud: Hetzner / Daytona / Vercel / E2B / DigitalOcean). Sub-1s checkpoint startup, per-box browser/VS Code/persistent shells, and git credentials stay on the host. MIT. +

+ 🔗 View Repository +
+
+ +
+ AgentField - Control plane for orchestrating AI agent swarms as microservices — best-in-class DX +
+ Open-source infrastructure for orchestrating AI agent swarms at scale. Best-in-class developer experience with SDKs for Python, Go, and TypeScript. Handles async execution, durable state, and observability. +

+ 🔗 View Repository +
+
+ +
+ agentledger - Local-first cost ledger — what your coding agents really cost in tokens and money +
+ Reads the session logs OpenCode, Claude Code, Codex and Gemini CLI already leave on disk and turns them into token and dollar totals. Prices cache reads and cache writes at their own rates instead of counting them as input, attributes spend by project/branch/model, detects context churn, and projects a budget. Zero dependencies, no network calls — your entire coding history never leaves the machine. +

+ 🔗 View Repository +
+
+ +
+ aGiTrack - Turns every agent turn into a traceable git commit, with a live dashboard +
+ A terminal tool that drives OpenCode (or Claude Code or Codex) and automatically commits each agent turn, recording the prompt, the model, and the token cost alongside the diff, so the AI's work leaves a clean and reviewable git history. Ships with a live web dashboard for browsing commits, sessions, and token spend. +

+ 🔗 View Repository +
+
+ +
+ Antigravity Local Bridge - Local OpenAI-compatible API bridge for Antigravity +
+ An Antigravity extension that exposes a local OpenAI-compatible HTTP server on localhost:11435. Enables any OpenAI-compatible tool (OpenCode, Aider, Cline, Continue.dev) to use Antigravity's Gemini, Claude, and GPT models without additional API keys. +

+ 🔗 View Repository +
+
+ +
+ Argus - Banking compliance SDLC framework for AI agents +
+ Agent-agnostic framework that installs a complete banking compliance SDLC into any codebase. Deploys 5 specialized agents (Guardian, Compliance, Builder, Tester, Reviewer) to enforce GDPR, DORA, MiCA, PSD2, PCI-DSS and other regulations across the entire software lifecycle. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ axi-memory (mem-axi) - Filesystem + git agent memory CLI with TOON output +
+ A bash CLI (@masculinecache/mem-axi) giving terminal coding agents durable cross-session memory stored as markdown + YAML frontmatter in a git repository — no daemon, no database, no lock-in. Adds are structured records (decision, howto, failure, constraint, preference) with confidence and priority, retrieved via ripgrep-backed keyword search over frontmatter; output follows the AXI 10 principles for agent ergonomics (TOON, minimal schemas, definitive empty states, structured errors, exit 0/1/2). Composable with OpenCode sessions as a memory bridge — skill entry points can route capture and recall through the same CLI, and dedicated never-write-secrets handling redacts common secret patterns from stored records. +

+ 🔗 View Repository +
+
+ +
+ Azdaja - Local context evaluator for OpenCode with bounded semantic calls and validated results. +
+ A Rust binary that keeps source material outside the root prompt, runs exact analysis in a local Python sandbox, and requests bounded semantic judgments through OpenCode when needed. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Beads - Project task management
Steve Yegge's project/task management system for agents (with beads_viewer UI).

- 🔗 View Repository + 🔗 View Repository +
+
+ +
+ Bifrost - OpenCode gateway for multi-provider routing +
+ Route OpenCode requests through Bifrost's OpenAI-compatible gateway with provider selection, virtual-key controls, and request logging. +

+ 🔗 View Repository  •  📖 Docs
@@ -1572,6 +4087,24 @@ Also available for bat and Ghostty in the same repository. +
+ claudex-switch - OpenCode V1 Go profiles share session history; experimental V2 profiles isolate credentials and history +
+ Source-available CLI for OpenCode V1 Go account aliases and provider-reported quotas. V1 profiles share normal session history; experimental V2 profiles keep credentials and SQLite history per alias. Also supports Claude Code and Codex. Licensed under MIT + Commons Clause v1.0: ordinary work use is allowed, but charging third parties for products or services whose value derives entirely or substantially from this tool requires separate permission. +

+ 🔗 View Repository +
+
+ +
+ Claudexor - Run OpenCode alongside Claude Code, Codex, and Cursor in one local-first control plane +
+ A local-first control plane that runs OpenCode alongside Claude Code, Codex, and Cursor while keeping one Claudexor thread across harness lanes. Adds isolated workspaces, Best-of-N runs, cross-model review, and typed apply gates; quota-aware multi-subscription rotation is available for Claude Code and Codex. +

+ 🔗 View Repository  •  📖 Docs +
+
+
CLI Proxy API - Multi-model proxy
@@ -1582,11 +4115,11 @@ Also available for bat and Ghostty in the same repository.
- CodeWalk - Native cross-platform Flutter client for OpenCode server mode + cliproxy-rs - Use your Claude and ChatGPT accounts in OpenCode through one local endpoint, with each account's limits on a dashboard
- A fast, native Flutter client for OpenCode server mode with realtime streaming chat, speech-to-text on all platforms, multi-server profiles, model selection, and a Material 3 responsive UI for Linux, macOS, Windows, Web, and Android. + A Rust port of CLIProxyAPI. OpenCode points at it as an OpenAI-compatible custom provider, and it translates to the Anthropic, OpenAI and Gemini APIs while spreading requests across the accounts and API keys you already have. The built-in dashboard shows each Claude and Codex account's 5-hour and weekly limits. Reads CLIProxyAPI's config and auth files. MIT.

- 🔗 View Repository + 🔗 View Repository
@@ -1600,11 +4133,20 @@ Also available for bat and Ghostty in the same repository.
- Comfanion Workflow - AI-assisted development workflow with agents, skills, and semantic search + Cognitive Lead HQ - OpenCode multi-agent HQ with Brain/Hands split, FastMCP and 31 skills
- Complete workflow system for AI-assisted development. Includes specialized agents (analyst, PM, architect, developer), reusable skills, slash commands, semantic code search with local vectorizer, and sprint management with Jira integration. + Documentation-only OpenCode HQ with Brain/Hands split, 3 FastMCP servers (context/memory/lint), Kanban ZAC workflow and 31 reusable skills.

- 🔗 View Repository + 🔗 View Repository  •  📖 Docs +
+
+ +
+ cowork-to-code-bridge - Run agent tasks on your own machine from a sandboxed caller, with no inbound port +
+ A local-first async bridge that lets an agent running somewhere else — a cloud sandbox, a container, a hosted chat session, a CI job — execute work on the developer's real machine. There is no network listener, no inbound port and no tunnel: a daemon watches a shared directory, the remote side drops a JSON task file in, and the daemon runs it locally and writes a result file back. Any shared folder works (bind mount, Syncthing, Dropbox, NFS). Execution is allow-listed — only scripts installed into the daemon's scripts directory can run, so a remote caller cannot request arbitrary shell. Tasks are non-blocking and cancellable (SIGTERM to the whole process group, then SIGKILL after a grace period), output is size-capped while streaming with truncation reported, and results carry real exit codes. Ships ~25 scripts (host health, disk, ports, docker ps/logs, git status, package updates), a wrapper that hands a whole task to a local CLI coding agent, and an MCP proxy that relays JSON-RPC to local stdio MCP servers. Python client, stdlib-only, MIT, macOS and Linux. +

+ 🔗 View Repository
@@ -1618,11 +4160,29 @@ Also available for bat and Ghostty in the same repository.
- Deck - Local cockpit for OpenCode-powered autonomous agents with secure sandboxes and live desktop visibility. + DevIntern - Turn tracker tickets into OpenCode-authored, self-reviewed pull requests
- Open-source desktop cockpit that runs OpenCode-integrated agents in isolated Docker sandboxes with chat plus live noVNC desktop monitoring, tool permission controls, and a Pilot bridge suite for orchestrating agents from Telegram, Slack, WhatsApp, and more. + Wires the task tracker your team already uses (Jira, Linear, Trello, Asana, Azure DevOps, GitHub Issues, or plain markdown files) to OpenCode. Running `devintern PROJ-123 --create-pr` picks up the ticket, runs OpenCode non-interactively in your repo, self-reviews the diff, and opens a pull request. A feasibility gate bounces vague tickets back to the tracker with questions instead of producing a confidently wrong PR. An optional unattended mode fully automates ticket handling: scheduled ticket pickup plus webhook-driven handling of PR review comments, so reviewer feedback becomes commits on the same branch. Includes a companion `devpm` tool that turns rough prompts, logs, or Figma frames into well-specified, codebase-grounded tickets. Runs on your machines with your own model keys.

- 🔗 View Repository + 🔗 View Repository  •  📖 Docs +
+
+ +
+ djimitflo - Djimit Agentic OS control plane with verified OpenCode executor integration +
+ A TypeScript monorepo control plane for goal-driven autonomous loops, governance gates, and multi-runtime execution. Includes a verified OpenCode executor runtime, loop lifecycle management, maker/checker/security leases, and a dashboard for tracking goals and loop runs. +

+ 🔗 View Repository +
+
+ +
+ dsh-movein - Preview and move OpenCode setup into DeepSeek Harness +
+ Preview and migrate global and project OpenCode configuration into DeepSeek Harness. Handles JSONC precedence, singular and plural asset directories, inline agents and commands, local and remote MCP servers, disabled entries, and environment placeholders without copying secret values. +

+ 🔗 View Repository
@@ -1635,6 +4195,33 @@ Also available for bat and Ghostty in the same repository. +
+ Foreman - Jev-powered agent supervisor for OpenCode workers +
+ Runs OpenCode workers through opencode run while TypeSafe AI's Jev independently assesses requirements, implementation completion, tests, progress, and human escalation. Foreman can continue, stop, retry, or launch independent verification workers. The OpenCode backend supports stop/retry interventions. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Forgeo - Scheduled software factory that runs your coding agent on a backlog +
+ A scheduled, agent-driven software factory for a repository. Keep a plain JSON backlog of tasks and Forgeo runs your configured coding agent (opencode, Claude Code, Codex, or any CLI) on each one, commits the result to the default branch, and runs a refactoring pass when the backlog is empty. Pauses and writes BLOCKER.md when the agent needs a human decision, with a web dashboard for every instance. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ fractal - Hierarchical coding-agent loops with recursive delegation and per-node worktrees +
+ Supports OpenCode as one of five coding-agent backends. Each node runs in its own Git worktree, delegates separable subtasks recursively, and records state and cost data in a local SQLite database with live terminal controls. +

+ 🔗 View Repository +
+
+
Gemini CLI to API - Gemini proxy
@@ -1644,6 +4231,15 @@ Also available for bat and Ghostty in the same repository.
+
+ Geneseed - Compiles a disciplined agent harness for OpenCode - laws enforced by plugins at the tool boundary +
+ One source renders into a ready-made OpenCode harness - a constitution of laws and doctrines, 18 capability agents, 47 native skills, a memory convention and 7 plugins that hard-block force-pushes, reset --hard and credentials written into tracked files before the tool runs. Install once globally and every repo inherits it; 14 themes change only the voice. Zero runtime dependencies. Also emits for Claude Code, Bob, OpenClaude and plain AGENT.md tools. +

+ 🔗 View Repository  •  📦 npm +
+
+
GolemBot - Unified AI assistant framework for multiple Coding Agent CLIs
@@ -1654,16 +4250,7 @@ Also available for bat and Ghostty in the same repository.
- Handy - Speech to Text -
- Easy Open Source Speech to Text. -

- 🔗 View Repository -
-
- -
- hcom - Let AI agents message, watch, and spawn each other across terminals + hcom V2 - Let AI agents message, watch, and spawn each other across terminals
Claude Code, Gemini CLI, Codex CLI, and OpenCode agents in separate terminals can message each other, detect file edit collisions, read transcripts, view terminal screens, subscribe to activity, and spawn/fork/resume agents. First-class OpenCode support with native plugin. Includes TUI dashboard, cross-device relay, Python API, and multi-agent workflow scripts. pip installable, MIT licensed.

@@ -1672,11 +4259,29 @@ Also available for bat and Ghostty in the same repository.
- Hipocampo - Dual memory system with BIRE search for AI agents + herdr-reviewr - Review your coding agent's diff in a terminal pane and send line comments back to OpenCode
- A dual-memory system (PostgreSQL + pgvector + Gemini Embeddings) for AI coding agents. Implements the BIRE algorithm (Búsqueda Integrada por Relevancia Expansiva) — unified semantic + lexical search with auto-tagging, hybrid scoring, GIN trigram indexes, and cross-system 768d embeddings. Ships as an opencode skill with SKILL.md, Python scripts, and full DDL schema. + A terminal code-review pane that runs beside OpenCode in herdr. Read the agent's diff, comment on lines or ranges, and send the comments straight back to the agent's input. Also works with Claude Code, Codex and Pi.

- 🔗 View Repository + 🔗 View Repository +
+
+ +
+ Hexis - Git-backed skills, tools, and context for OpenCode +
+ Manages shared agent skills, tool access, and context in Git, then makes approved resources available to OpenCode through a remote OAuth MCP connection. +

+ 🔗 View Repository +
+
+ +
+ Hivemind - Delegate grunt work to headless opencode worker swarms while your main agent plans and reviews +
+ Runs opencode as a disposable worker fleet driven by a planning agent. Every worker returns exactly one compact JSON line (result, tokens, cost, duration), so raw agent streams never flood the orchestrator's context. Writing workers each get their own git worktree so parallel edits cannot corrupt each other, and an explicit fallback ladder retries once, then falls back to the orchestrator doing the subtask itself, so a swarm never fails a task a single agent could have finished. Ships scout, coder and tester agent definitions plus slash commands for parallel review panels, research sweeps, batched migrations and partitioned test runs. +

+ 🔗 View Repository
@@ -1684,36 +4289,26 @@ Also available for bat and Ghostty in the same repository. jailoc - Sandboxed Docker environments for OpenCode agents
CLI tool that wraps OpenCode agents in isolated Docker Compose environments with file isolation (bind-mounted workspaces only), network isolation (private subnets blocked by default with host allowlisting), and a per-workspace DinD sidecar. Zero config to start. -

🔗 View Repository
- Kimaki - Discord bot controller + llm-panel - Put one question or diff to several LLM CLIs in parallel — opencode runs as a verified read-only agent
- A Discord bot to control opencode sessions on any computer via Discord. + Put one question or diff to several LLM CLIs in parallel — opencode judges run as a verified read-only agent alongside codex, claude and ollama — with every answer shown in full, an anonymised rebuttal round, cost accounting, a GitHub Action, and a measured miss rate on AACR-Bench.

- 🔗 View Repository + 🔗 View Repository  •  📖 Docs
- MCP Voice Interface - Talk to AI assistants + nsq - Run OpenCode, Claude Code and Codex side by side in one terminal and see which one needs you
- Talk to AI assistants using your voice through a web browser. Compatible with Claude Desktop and opencode. + Open-source CLI that runs OpenCode (1.x and 2.x), Claude Code, Codex or any command side by side in one terminal. Status comes from each CLI's own events (working / needs you, with the question / finished), and a permission prompt can be answered y/a/n without opening the agent. A daemon keeps agents alive when the terminal closes, each agent can get its own git worktree, and cost is tracked per agent. Never writes to opencode.json; each session gets its own config layer. OpenRouter and local model servers supported. No account, no telemetry. MIT, `npx neurosquad`.

- 🔗 View Repository -
-
- -
- NextProb - Desktop notebook for vibe-coded websites, edited by your local AI coding-agent CLI (OpenCode and others) -
- Electron desktop app that turns a workspace folder of plain .html files into an AI-editable notebook. Agent-agnostic — edit notes with OpenCode or any other agent CLI in an embedded terminal. Notes are real HTML pages. Each note is a self-contained folder that can include a SQLite database, key/value store, attached files, and scripts — so it can grow from a static page into a sortable table, interactive dashboard, or research tool. -

- 🔗 View Repository + 🔗 View Repository
@@ -1726,15 +4321,6 @@ Also available for bat and Ghostty in the same repository. -
- OC Manager - Metadata TUI -
- Terminal UI for inspecting, filtering, and pruning OpenCode metadata stored on disk. -

- 🔗 View Repository -
-
-
OC Monitor Share - CLI monitoring tool
@@ -1745,16 +4331,34 @@ Also available for bat and Ghostty in the same repository.
- Octto - Interactive browser UI for AI brainstorming + ocm - Plugin marketplaces for OpenCode - install skills, agents, commands and MCP servers from any git repo, globally
- Interactive browser UI for AI brainstorming with multi-question forms, parallel exploration branches, and visual feedback. + Turn any git repository into a plugin marketplace. `ocm add <url>` installs its skills, agents, commands, JS plugins and MCP servers once into your global OpenCode config, so they work in every project, and `ocm update` plus a startup auto-sync keep them current. Includes a /ocm TUI for browsing, asks before any plugin code runs, and never overwrites your own files.

- 🔗 View Repository + 🔗 View Repository
- OCX - OpenCode package manager + OCP - Isolated OpenCode profiles +
+ Juggling work and personal OpenCode accounts means hand-swapping env vars and clobbering your sessions. ocp gives each project its own auth, session history, and config — and switches automatically based on the directory you're in. Think direnv for OpenCode. +

+ 🔗 View Repository +
+
+ +
+ ocp - Manage OpenCode config profiles in Git +
+ A CLI for switching OpenCode configuration profiles stored in Git repositories. +

+ 🔗 View Repository +
+
+ +
+ OCX V2 - OpenCode package manager
The missing package manager for OpenCode extensions - ShadCN model with Ghost Mode.

@@ -1763,29 +4367,11 @@ Also available for bat and Ghostty in the same repository.
- Open Agent - Self-hosted control plane + oos - Find any OpenCode session across all projects and resume it instantly
- Self-hosted control plane for OpenCode agents with isolated Linux workspaces (systemd-nspawn), git-backed Library configuration, and multi-platform dashboards (Next.js web, SwiftUI iOS). + A TUI fuzzy finder over every OpenCode session from every project — type keywords to filter in real time, pick with ↑/↓, Enter to jump back into the conversation. Go, zero config, single binary.

- 🔗 View Repository -
-
- -
- Open Dispatch - Control agents from Slack, Teams, or Discord — locally or via Fly.io Sprites -
- Bridge app connecting chat platforms (Slack/Teams/Discord) to AI coding assistants. Run agents locally or spin up isolated Fly.io Sprites for parallel execution. Supports 75+ AI providers via OpenCode, Claude CLI, real-time output streaming, session persistence, and smart message routing. -

- 🔗 View Repository -
-
- -
- OpenChamber - GUI for OpenCode -
- A fan-made web and desktop interface for OpenCode with VS Code extension, multiple sessions, and git worktrees management. -

- 🔗 View Repository + 🔗 View Repository
@@ -1799,25 +4385,25 @@ Also available for bat and Ghostty in the same repository.
- Opencode Actions - Reusable GitHub Actions for installing and running OpenCode in CI/CD workflows + Opencode Actions - Reusable GitHub Actions for installing and running OpenCode in CI/CD workflows
A collection of reusable GitHub Actions that make it easy to integrate OpenCode into your CI/CD pipelines. Includes actions for PR review, architecture review, spec coverage checking, and one-step opencode setup and execution. Supports caching, retry logic, and multiple LLM providers.

- 🔗 View Repository + 🔗 View Repository
- Opencode Chat Export - MCP server to export chat history to Markdown + OpenCode Database Cleaner - Safely analyze and reclaim unused space in OpenCode's SQLite database
- MCP server that exports OpenCode chat history to Markdown files with tool calls, reasoning, and cost summaries. Export current session, specific sessions by ID, or bulk exports. pip installable. + A zero-dependency Python CLI that reports live data and freelist bloat in OpenCode's local SQLite database, then safely reclaims unused disk space with process checks, WAL checkpointing, verified backups, VACUUM, and integrity checks. It does not delete sessions.

- 🔗 View Repository + 🔗 View Repository
- Opencode DDEV - DDEV container wrapper + Opencode DDEV V1 only - DDEV container wrapper
Wraps bash commands to execute inside the DDEV container (Docker-based PHP development environments).

@@ -1826,32 +4412,23 @@ Also available for bat and Ghostty in the same repository.
- Opencode History Search - Search OpenCode conversations with keyword, regex, and fuzzy search + Opencode Helper - Cleanup, analysis & visualization CLI for OpenCode
- Search through your OpenCode conversation history with powerful keyword, regex, and fuzzy search capabilities. Features date filtering, multiple match types (titles, messages, tools, file paths), and fast performance (<50ms queries). + Zero-dependency Python CLI that cleans old sessions and temp files, analyzes model/tool/MCP/skill usage patterns with AI interpretation, and generates visual workflow diagrams. pip install opencode-helper. +

+ 🔗 View Repository +
+
+ +
+ Opencode History Search V1 only - Search OpenCode conversations with keyword, regex, and fuzzy search +
+ Search through your OpenCode conversation history with powerful keyword, regex, and fuzzy search capabilities. Features date filtering, multiple match types (titles, messages, tools, file paths), and fast performance (<50ms queries).

🔗 View Repository
-
- OpenCode Mobile - Android client for OpenCode — drive your self-hosted agent from your phone -
- Free, open-source (MIT) Android app that connects to an opencode server you run yourself. Stream coding sessions in real time, review file diffs, and approve tool calls from your phone. Install via the F-Droid repo or a signed APK. -

- 🔗 View Repository -
-
- -
- Opencode Neovim - Neovim plugin -
- Neovim plugin for making convenient editor-aware prompts. -

- 🔗 View Repository -
-
-
Opencode Profile Router - Profile router for auth and selective config isolation
@@ -1862,34 +4439,16 @@ Also available for bat and Ghostty in the same repository.
- Opencode Session Manager - Session viewer & manager + Opencode Session Manager - Session viewer & manager
- View & Manage sessions for opencode, also detect orphan sessions for deletion + View & Manage sessions for opencode, also detect orphan sessions for deletion

🔗 View Repository
- Opencode Sessions - Session tracker -
- Session management tool for opencode to track and organise coding sessions. -

- 🔗 View Repository -
-
- -
- OpenCode Sidebar - Tmux sidebar for managing OpenCode sessions -
- A tmux-backed sidebar launcher for OpenCode that keeps the session list, preview pane, and OpenCode TUI together in one workspace. It supports session recall, background sessions, search, project folders, deletion, and sound notifications. -

- 🔗 View Repository -
-
- -
- Opencode Skills - Skills management + Opencode Skills V1 only - Skills management
Skills management system for organising and tracking opencode capabilities.

@@ -1898,29 +4457,11 @@ Also available for bat and Ghostty in the same repository.
- Opencode Telegram Bot - Telegram bot client for OpenCode CLI + OpenCode Unlimited Proxy - Self-hosted OpenAI-compatible gateway for the OpenCode free tier, with a de-duplicated egress pool
- Run and monitor AI coding tasks from your phone while everything runs locally on your machine. + Serves OpenCode's anonymous free tier (`Bearer public`) through an OpenAI-compatible API. Documents and implements the four server-side conditions those models gate on, so callers outside the CLI don't hit `403 FreeTierError`: a tool named exactly `read` (renaming it does not count), forced `stream: true`, a versioned `User-Agent`, and a canonically-encoded session id. Each one is independently probeable with `scripts/gate-probe.py`, which ships negative controls so a pass cannot be confused with a broken harness. In front of the gateway sits a de-duplicated pool of rotating egress addresses, so six nodes are six quota buckets rather than three.

- 🔗 View Repository -
-
- -
- OpenCode Vim - OpenCode fork with built-in Vim mode -
- An unofficial OpenCode fork that adds Vim motions, navigation, and editing directly to the OpenCode TUI. -

- 🔗 View Repository -
-
- -
- Opencode Web - Browser-based access -
- Web interface for opencode - browser-based access to AI coding agent. -

- 🔗 View Repository + 🔗 View Repository
@@ -1933,7 +4474,6 @@ coherence, tests, build, semantic alignment), per-project operational memory, pr fallback chain (anthropic → openrouter → openai), and MCP composability with existing user tools. Ships 8 orchestration skills, 3 scheduled-task recipes, and 1 custom agent template (cowork-with-github). Install: drag-and-drop .plugin into Cowork. -

🔗 View Repository @@ -1949,11 +4489,11 @@ template (cowork-with-github). Install: drag-and-drop .plugin into Cowork.
- opencode-kanban - Kanban-style task management for opencode + OpenKrak - Pre-computes your repo structure via Dorchester engine before the LLM sees a single token
- Kanban tool that allows you to stay in terminal. + OpenKrak is an MCP server that runs the Dorchester static analysis engine on your repository and delivers a structured Mahadata brief to your coding agent before it reads any files. Cuts token usage 20-80% by replacing raw file reads with a pre-computed dependency graph, hotspot ranking, and blast radius map. Works with OpenCode. Free tier includes 15 queries per 24h rolling window. Install via npm install -g openkrak-mcp.

- 🔗 View Repository + 🔗 View Repository
@@ -1967,29 +4507,34 @@ template (cowork-with-github). Install: drag-and-drop .plugin into Cowork.
- OpenTab - Terminal UI for browsing your OpenCode spend by month, day, project, session, and model + openwts - Isolated git worktrees for AI coding agents — opencode, Claude Code, and more
- A terminal UI that reads OpenCode's local SQLite database (read-only) to show where your tokens and money went — by month, day, project, session, and model, with spend-over-time trends and drill-down into your most expensive sessions (model mix and subagent costs included). Standard-library Python only, offline by default. Also reads Claude Code, Codex, the Copilot CLI, and more. + Stop context-switching. openwts creates isolated git worktrees for each task +and opens your AI coding agent inside them — no stashing, no partial commits, +no "what branch was I on?" + +One command — `openwts opencode hotfix` — creates a worktree, opens opencode +inside it, and cleans up when you exit. Jump between tasks like it's nothing. + +Features +- Agent-agnostic: opencode, Claude Code, and any AI CLI on PATH +- Auto-detects opencode, falls back to an interactive picker +- Works on all platforms: Linux, macOS, Windows +- Manifest tracking — never touches worktrees it didn't create +- Cleanup modes: auto-remove, prompt, or leave + +Zero config. One env var if you want a default agent.

- 🔗 View Repository + 🔗 View Repository
- OpenWork - Desktop GUI for OpenCode workflows + OrcaReplay - Record an OpenCode run, replay it offline with the network off, fork it onto another model
- Open-source alternative to Claude Cowork built on top of OpenCode. Provides a polished desktop UI for sessions, skills, plugins, and templates. + Records an OpenCode session without modifying it, then replays that run with the network off and reproduces it with the network off, or forks it from any step so the model is the only thing that changed. Because OpenCode keeps its provider origin in opencode.json rather than an environment variable, there is nothing to redirect: the adapter terminates the TLS OpenCode opened itself using a per-run CA that only the launched process trusts and that is deleted when the run ends, and your config is left untouched. Alongside the model traffic it records shell exit codes and timing, per-turn file changes and MCP calls, all on one timeline. Apache-2.0, Node 20+, and the trace format is a published spec so other readers can be written against it.

- 🔗 View Repository -
-
- -
- P4OC (Pocket for OpenCode) - Android client for OpenCode -
- Native Android app for controlling OpenCode from your phone. Chat with AI, manage sessions, browse files with syntax highlighting, view diffs, and use an embedded terminal — all styled with a terminal UI aesthetic. Available on Google Play. -

- 🔗 View Repository + 🔗 View Repository
@@ -2003,16 +4548,71 @@ template (cowork-with-github). Install: drag-and-drop .plugin into Cowork.
- RedCode - TUI + GUI dual-interface AI coding assistant with MCP ecosystem + Roborev - Background code review agent with OpenCode agent-hook support
- A feature-rich opencode fork with dual-interface (TUI terminal + GUI desktop), built-in MCP ecosystem (CodeGraph, TypeGraph, jCodeMunch, Browser, Vision, Web Search), automated memory system, AI personality system, skill extensions, and 3-tier permission guardrails. Privacy-first design with personal data fully separated from public templates. + A multi-agent background commit-review tool that runs automated code reviews and exposes a $roborev-fix skill via OpenCode's agent hook. Useful for catching issues before they land while keeping the review loop inside the OpenCode workflow.

- 🔗 View Repository + 🔗 View Repository
- supamem - Project-agnostic dual-memory MCP CLI for OpenCode + rolecraft - The package manager for AI agents — install, test, publish, and manage skills & MCP servers across 86+ agents +
+ Zero-dependency CLI for installing AI agent skills as roles & behaviors from any source (local folders, GitHub, GitLab, SSH). Supports 86 agent targets (26 verified), lockfile-based CI re-install with `rolecraft ci`, `rolecraft doctor` for troubleshooting, and bundled team onboarding. Works with opencode, claude-code, cursor, and more. +

+ 🔗 View Repository +
+
+ +
+ Sabi - Adaptive per-round inference routing for coding agents — model, effort and provider scheduled against the trajectory +
+ Sits between a coding harness and its model providers and makes a fresh routing decision per inference round, not per session. Each round is classified from trajectory state — round position, tool calls and their results, failure evidence, context pressure — and a deterministic policy maps class to tier (failure → strong, exploration → cheap, first-turn → mid). An optional semantic judge (TypeSafe Jev) runs only on rounds the policy cannot classify, and is fail-open. The harness loop is untouched. +Exposes an OpenAI-compatible local proxy at 127.0.0.1:8787/v1. From OpenCode, `npm run connect:opencode` writes only a provider.sabi entry and the adaptive alias is `sabi/sabi-code`; fixed baselines `sabi/sabi-cheap`, `sabi/sabi-mid` and `sabi/sabi-strong` are available for comparison. Borrowed-auth passthrough is supported: the harness keeps its own credential and Sabi rewrites only model. Decisions and cost are inspectable via `npm run report`. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Session Coherence - Cross-tool session memory for AI coding assistants +
+ Cross-tool session memory for AI coding assistants. One markdown chronicle shared by 9 tools (Claude Code, Cursor, Codex, Gemini CLI, Aider, and more). Zero dependencies, ~300 token fixed cost, 100% local. +

+ 🔗 View Repository +
+
+ +
+ SpecRalph - Spec-Driven Ralph-Wiggum AI coding automation CLI +
+ AI Loops runner for OpenCode and other agent CLIs. Enables spec-driven development workflows with structured prompt engineering and loop automation for AI coding agents. +

+ 🔗 View Repository +
+
+ +
+ squirrelscan MCP - Website audit CLI, MCP server and skill for coding agents (SEO, performance, security, accessibility) +
+ CLI website audit tool built for coding agents. Runs 260+ rules across SEO, performance, security, accessibility and agent experience, and hands the agent exact, source-mapped fixes. Works with OpenCode via MCP (hosted https://mcp.squirrelscan.com/mcp with OAuth, or local `squirrel mcp` over stdio) to run audits, read reports and fix findings, or via the agent-skills format with `npx skills add squirrelscan/squirrelscan`. Free local audits, GitHub Action, MIT CLI and rules. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ staffetta - Model-decided context handoff: close a milestone, write memory to disk, restart with a clean session +
+ A relay-race alternative to compaction for long-running agents. Instead of a threshold rewriting the conversation in place, the agent itself decides when a milestone is closed, writes what the next session needs to disk, and hands over — the session ends and a fresh one picks up the baton. Memory lives in files (MEMORY.md overwritten, JOURNAL.md append-only, AGENTS.md for rules), so it is readable, diffable, correctable and survives the session. Four tools the agent calls itself: checkpoint (verifies by checksum that memory actually changed, rejects journal entries with no numbers in them, detects tampering with older entries), ask (pauses for a human decision, requires the agent to state what it would do without an answer), resume (refuses until the decision is written down), and loop (reopens the session and nothing else — it ends when the model declares --done or --blocked, not when a counter infers it). Measured on a local KAT-Coder V2.5 via llama.cpp: 7 milestones closed autonomously, 7 of 7 checkpoints invoked unprompted, 587 tests green, ~5,500 tokens of context per round instead of a compacted session restarting from 142,000 — and it does not grow across rounds. Pure bash, no dependencies; adapters/opencode/loop.sh is the opencode adapter and everything under core/ works with any agent that can run a shell command. +

+ 🔗 View Repository +
+
+ +
+ supamem MCP - Project-agnostic dual-memory MCP CLI for OpenCode
Adds semantic memory (Qdrant tuned hybrid retrieval — RRF fusion of dense MiniLM + sparse BM25) and structural memory hooks to OpenCode via MCP. Ships an installer that wires `qdrant-find` / `qdrant-store` tools and a snapshot hook into your project's OpenCode config. Python 3.12+, MIT, on PyPI as `supamem`.

@@ -2030,7 +4630,7 @@ template (cowork-with-github). Install: drag-and-drop .plugin into Cowork.
- SwarmVault - Local-first RAG knowledge base compiler with bundled skill and MCP server + SwarmVault MCP - Local-first RAG knowledge base compiler with bundled skill and MCP server
Turns raw docs, research, and code into a persistent markdown wiki, knowledge graph, and hybrid SQLite FTS + embeddings search. Ships a bundled skill (schema-first, graph-query-first conventions) and an MCP server, so it works with OpenCode, Claude Code, and Codex. Offline heuristic provider by default; optional Ollama for local embeddings.

@@ -2047,10 +4647,37 @@ template (cowork-with-github). Install: drag-and-drop .plugin into Cowork.
+
+ Tree Ring Memory - Local-first memory lifecycle CLI for AI agents +
+ Rust-native memory lifecycle layer for AI agents with project-scoped SQLite/FTS recall, forgetting, audit, consolidation, DOX/Revolve sync adapters, terminal TUI, and agent-framework discovery for OpenCode-style workflows. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ trustless - Credential broker CLI — injects secrets into subprocesses and proxies so AI agents never see plaintext keys +
+ trustless decouples AI agents from credentials. Agents reference secrets by name; the broker resolves them at the process or transport layer with output sanitization, integrated DLP (outbound redaction), OAuth token refresh, structured audit logs, and pass/Bitwarden backends. Zero-dependency single binary with bundled agent skills for OpenCode, Claude Code, Codex, and Hermes. +

+ 🔗 View Repository +
+
+ +
+ Universal Agent Plugins - Manage Agent Plugins across OpenCode and other AI coding agents +
+ A cross-platform CLI for installing, updating, repairing, and removing Agent Plugins 1.0 across OpenCode, Codex, Claude Code, Cursor, Gemini CLI, and other compatible agents. It also includes tools and an SDK for building portable plugins. +

+ 🔗 View Repository +
+
+
Universal LLM API Proxy - Universal multi-model proxy and library - made with Opencode community
- Universal LLM Gateway: One API, every LLM. OpenAI/Anthropic-compatible endpoints with multi-provider translation and intelligent load-balancing. Works with any application that supports custom OpenAI/Anthropic base URLs—no code changes required in your existing tools. Best support for Antigravity/Gemini CLI out of the competition. Deploy anywhere. Opencode Discord discussion + Universal LLM Gateway: One API, every LLM. OpenAI/Anthropic-compatible endpoints with multi-provider translation and intelligent load-balancing. Works with any application that supports custom OpenAI/Anthropic base URLs—no code changes required in your existing tools. Best support for Antigravity/Gemini CLI out of the competition. Deploy anywhere.

🔗 View Repository
@@ -2070,21 +4697,52 @@ template (cowork-with-github). Install: drag-and-drop .plugin into Cowork.
Adds local and project-scoped MCP memory to OpenCode, so agents can remember decisions, preferences, architecture context, and previous fixes across sessions.

- 🔗 View Repository + 🔗 View Repository  •  📖 Docs
- Vibe Kanban - Manage AI in parallel + yoink - Connect an API-key provider to opencode and 12 other coding harnesses, and switch AI coding logins
- A Kanban board to manage and orchestrate AI coding agents in parallel. + CLI and macOS menu bar app. Add a provider once (OpenAI, Kimi Code, Moonshot, OpenRouter, DeepSeek, z.ai, Ollama or any OpenAI- or Anthropic-compatible base URL), pick its models, and tick opencode; yoink writes the provider into ~/.config/opencode/opencode.json (or opencode.jsonc, edited in place), alongside pi, codex, Claude Code, Qwen Code, Kilo Code, Droid and others. It also saves and switches Claude Code, ChatGPT (Codex), Kimi Code, Gemini and GitHub Copilot logins.

- 🔗 View Repository + 🔗 View Repository

-➕ Add a Project via PR + +

Forks (3)

+ +
+ OpenCode Vim V2 - OpenCode fork with built-in Vim mode +
+ An unofficial OpenCode fork that adds Vim motions, navigation, and editing directly to the OpenCode TUI. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ opencode-rust - The open source AI coding agent, in Rust - CLI, TUI and HTTP server +
+ An independent Rust implementation of the TypeScript opencode, providing a CLI, a TUI and an HTTP server for local AI agents, with no Docker required. MIT licensed, 21 crates and 571 tests. The command is `opr`; install with `npm install -g opencode-rust` or `brew install vakandi/tap/opencode-rust`. Not affiliated with the OpenCode team. Docs: https://vakandi.github.io/opencode-rust/ +

+ 🔗 View Repository +
+
+ +
+ RedCode - TUI + GUI dual-interface AI coding assistant with MCP ecosystem +
+ A feature-rich opencode fork with dual-interface (TUI terminal + GUI desktop), built-in MCP ecosystem (CodeGraph, TypeGraph, jCodeMunch, Browser, Vision, Web Search), automated memory system, AI personality system, skill extensions, and 3-tier permission guardrails. Privacy-first design with personal data fully separated from public templates. +

+ 🔗 View Repository +
+
+ +
+➕ Add a Project
@@ -2092,9 +4750,145 @@ template (cowork-with-github). Install: drag-and-drop .plugin into Cowork.
-📚 RESOURCES +📚 RESOURCES (28)
+

Skills (7)

+ +
+ Claude Skills Pro - 15 battle-tested engineering skills (review, testing, debugging, security) that install into OpenCode in one command. +
+ A pack of 15 expert-workflow skills - seven-dimension code review, root-cause debugging, tests that catch real bugs, feature specs, security audit, safe refactoring, API design, zero-downtime migrations and more. Each skill encodes trigger conditions, a step-by-step procedure, and hard anti-patterns, so the agent follows senior-engineer discipline automatically. 7 skills are free (MIT). Install into OpenCode via npx skills add Hahaknight/claude-skills-pro --agent opencode. +

+ 🔗 View Repository +
+
+ +
+ DataEcho Skills - Deploy files, sites, and Dockerfile apps to live URLs + persistent agent memory, from opencode. +
+ Two zero-dependency Agent Skills for the DataEcho platform (dataecho.ai). `dataecho` publishes anything the agent builds — a single file, a static site, or a server-side app via Dockerfile — to a live URL in seconds, with anonymous publishing (24h claim flow), incremental deploys, and private cloud Drives with scoped share tokens. `dataecho-memory` gives the agent durable memory across sessions and machines — an indexed fact store on a private versioned drive with atomic concurrent-safe writes, history/restore, and one-command handoff. Install with `npx skills add mohocp/dataecho`; opencode discovers them via its standard skill paths. Also available as an MCP server (https://dataecho.ai/mcp). +

+ 🔗 View Repository +
+
+ +
+ Jev Social - Browser-grounded social research with Jev and the local socai CLI +
+ An OpenCode-compatible Agent Skill that routes an Instagram, TikTok, or LinkedIn research goal through Jev, runs read-only searches with the user's local socai CLI and existing browser session, and returns source-linked evidence plus a Markdown report. Requires Node 20+, a current socai CLI, a browser session, and either OpenRouter Jev or a local System One-compatible endpoint. +

+ 🔗 View Repository +
+
+ +
+ Juhe Skills - Juhe MCP 深度调研与快速查询 skill 集 +
+ 提供两个 AI agent skill:juhe-deep-researcher(四档可选深度调研分析,支持轻量/标准/深度/旗舰)和 juhe-quick-researcher(快速全网资讯搜索)。配合 Juhe MCP 远程服务使用,支持 RSS 订阅源检索、文章全文获取、AI 摘要、趋势分析等功能。适用于 OpenCode、Claude Code、Cursor 等支持技能和 MCP 协议的编码 agent。 +

+ 🔗 View Repository +
+
+ +
+ Meanwhile - Optional human side quests while OpenCode continues long work +
+ A portable Agent Skill that offers one bounded, opt-in learning, recovery, play, or reality-check quest while the coding agent continues. It requires no account, callback, or completion tracking. +

+ 🔗 View Repository +
+
+ +
+ repo-cover - Agent skill that designs your GitHub social preview as one self-contained HTML file +
+ The agent writes a 1280x640 og:image card following a constrained design system, with four editorial moods, CJK-first typography, a deterministic checker for contrast and line breaking, and PNG export through headless Chrome. Installs into OpenCode via the Agent Skills CLI. +

+ 🔗 View Repository +
+
+ +
+ SuperSpec - Requirement or production alert in, reviewed pull request out - 20 skills, one SKILL.md source +
+ A toolkit of 20 Agent Skills that combines the engineering discipline of superpowers with the living spec lifecycle of OpenSpec, and adds the two things neither has: end-to-end workflows that carry a requirement, or a production alert, all the way to a reviewed pull request, and multi-repo orchestration that runs one headless agent per repository. Implementation is dispatched to parallel test-driven subagents; a review panel with distinct lenses (quality, spec and guardrail compliance, cross-module integration) then returns a severity-graded verdict and drives a bounded fix loop until the code is approved. Root-cause analysis is evidence-based rather than a guess: competing hypotheses are falsified against logs, traces, metrics, code and git history before any fix is written. Capability specs follow the OpenSpec directory convention, so a repository initialized by the OpenSpec CLI works as-is. Nothing is written into your project - the guardrails are read in place at runtime, and there is no CLI or state machine to install. +

+ 🔗 View Repository +
+
+ +
+ +

MCP Servers (7)

+ +
+ Baizhi Cloud Agent Toolkit - Remote web search and page extraction MCP for OpenCode agents +
+ For OpenCode V2, configure a remote MCP server at https://agent-toolkit.app.baizhi.cloud/mcp with oauth disabled and Authorization: Bearer {env:BAIZHI_API_KEY}. It offers web search, page reading, and structured extraction. The linked MIT repository publishes integration configuration and documentation, not the hosted backend. Users need their own Baizhi account and API key; calls may consume paid credits. +

+ 🔗 View Repository +
+
+ +
+ Find MCP - Search 17,000+ MCP servers from the official MCP registry +
+ Find MCP is an MCP server for discovering other MCP servers. It searches the agentage MCP Catalog, which syncs 17,000+ servers from the official MCP registry (registry.modelcontextprotocol.io), through the mcp_search, mcp_get, and mcp_categories tools. Works with OpenCode as a generic MCP server, either remote over Streamable HTTP (https://catalog.agentage.io/mcp, no auth needed for search) or stdio via npx -y @agentage/find-mcp. +

+ 🔗 View Repository +
+
+ +
+ LWC - Source-grounded project memory for OpenCode with an Agent Skill, CLI, and read-only MCP server +
+ Local-first project memory for coding agents with bounded recall, source citations, provenance, atomic changesets, and optional document and code graphs. Includes the installable using-lwc Agent Skill and a stdio MCP server exposing one bounded, read-only exploration tool. +

+ 🔗 View Repository +
+
+ +
+ OutageDeck MCP - Vendor-published cloud and SaaS outage checks for OpenCode agents +
+ OutageDeck gives OpenCode agents current provider status, incident timelines, and observed uptime history for cloud and SaaS vendors, based on their official status feeds. Its hosted remote MCP server connects without a package, daemon, account, or API key for public status checks, so an agent can rule out dependency outages before changing code. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Pixeltable Developer MCP - Local MCP server for Pixeltable applications +
+ Local MCP server for Pixeltable, a multimodal data store with incremental computed columns and embedding search for agents. +

+ 🔗 View Repository +
+
+ +
+ RunAPI MCP - MCP server for model API jobs +
+ RunAPI MCP lets coding agents discover models, check pricing, and create image, video, music/audio, text-to-speech, and LLM tasks through RunAPI. +

+ 🔗 View Repository +
+
+ +
+ Tapetide MCP - Indian stock market data (NSE and BSE) for OpenCode agents +
+ MCP server that gives OpenCode structured Indian stock market data for about 8,200 NSE and BSE stocks, including quotes, quarterly financials, shareholding, a 326-ratio screener, FII/DII flows, option chains and company filings. Runs locally over stdio via npx with a free personal token, or remotely at https://mcp.tapetide.com/mcp with OAuth. MIT licensed, free plan available. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ +

Tools & Utilities (2)

+
Akephalos - Local-first markdown passport for portable agent context and memory
@@ -2104,6 +4898,95 @@ template (cowork-with-github). Install: drag-and-drop .plugin into Cowork.
+
+ GoTTY - Turn CLI into Web App +
+ A simple command-line tool that turns your CLI tools, like opencode, into web applications. +

+ 🔗 View Repository +
+
+ +
+ +

Configs & Starters (8)

+ +
+ AI Agent Automations - Automation prompts for OpenCode, Codex, Claude Code, and Cursor workflows +
+ A curated collection of agent automation prompts for real-world engineering and operations workflows. Covers OpenCode, Codex, Claude Code, and Cursor patterns for code maintenance, security reviews, research, support, billing, and work triage. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ Cosmosmith - Multi-agent workflow initializer with OpenCode adapters +
+ Generates AGENTS.md, task.md, proposal/design templates, and adapters for OpenCode, Claude Code, Cursor, Copilot, and Trae so mixed-agent projects can share one governance layer and verification ledger. +

+ 🔗 View Repository +
+
+ +
+ Infer Client Examples - OpenCode configurations for Infer's GPT-6 Astra and GPT-5.6 Sol models +
+ Configures Infer as a custom Responses API provider in OpenCode using an environment-based key. Includes Astra and Sol selectors, a standard-library Python client with an output-token cap, and offline tests. Live usage requires paid Infer wallet credit. +

+ 🔗 View Repository  •  📖 Docs +
+
+ +
+ kickstart.opencode - A heavily commented OpenCode starter config that teaches you what everything does. +
+ Inspired by kickstart.nvim. A minimal, well-commented OpenCode configuration designed as a starting point, not a framework. Every decision is explained. Includes free-only models and MCPs, a plan/execute workflow with interview-style clarification, and a careful agent for supervised AI execution. Read it, understand it, make it yours. +

+ 🔗 View Repository +
+
+ +
+ looot MCP config - opencode.json snippet for the looot remote MCP server, 2,500+ data API endpoints +
+ A ready opencode.json block that adds the looot remote MCP server (https://api.looot.ai/mcp) with browser sign-in, plus a variant that reads a token from {env:LOOOT_TOKEN}. looot gives an agent one key and one prepaid balance for work-email lookup, enrichment, SERP, backlinks and web page data. The same repo has snippets for other agent platforms and a starter SKILL.md that opencode loads from .agents/skills. +

+ 🔗 View Repository +
+
+ +
+ my-opencode-deepseek-config - Optimal DeepSeek V4 dual-model config — 11 agents, 15 skills, 25 commands +
+ A pure-config, zero-dependency OpenCode configuration optimized for DeepSeek V4 dual-model (Pro + Flash). Includes an orchestrator with 17 intent-gate patterns, delegation decision table, and cost-aware routing; 11 specialized subagents (planner, deep-worker, oracle, reviewer, consultant, ui-builder, explore, librarian, light-orchestrator, generalist); 15 on-demand skills (code-review, spec-workflow, deepwork, reflect, and more); and 25 slash commands. Designed for maximum token efficiency with model-isolated routing, background dispatch, read-only isolation for analysis agents, and execution-only discipline for worker agents. Iterated across 14 versions, continuously incorporating best practices from 6 upstream reference projects. +

+ 🔗 View Repository +
+
+ +
+ Opencode Config Starter - Flexible config starting point +
+ A powerful custom opencode configuration with agents, commands, rules, skills, and pre-configured MCP server. +

+ 🔗 View Repository +
+
+ +
+ OpenCode Ultra Setup - A full OpenCode setup with a team of 11 agents, persistent memory, context compression, and a real terminal. +
+ An "ultra" OpenCode setup combining oh-my-openagent (11 agents with team mode), supermemory (persistent memory), headroom (context compression up to ~57%), opencode-pty (interactive terminal), cited web search, and wakatime metrics. Includes Cortex and GitHub MCPs, an OmniRoute free AI gateway, and Karpathy + anti-slop guidelines in a global AGENTS.md. +

+ 🔗 View Repository +
+
+ +
+ +

Guides (4)

+
Coding Agent Orchestration - OpenCode Setup Guide / Orchestration
@@ -2123,43 +5006,25 @@ template (cowork-with-github). Install: drag-and-drop .plugin into Cowork.
- GoTTY - Turn CLI into Web App + OpenCode CN Deployment Guide - Chinese free-tier multi-model deployment guide (DeepSeek/Kimi/Zhipu/SiliconFlow/OpenRouter) + MCP + CN network tips
- A simple command-line tool that turns your CLI tools, like opencode, into web applications. + A practical Chinese-language guide for deploying OpenCode in mainland China on a budget. Covers a free-tier model matrix — DeepSeek V4 Flash for daily tasks, Kimi K2.x for coding, GLM-4-Flash / Qwen2.5-7B (permanently free) as fallback, plus OpenRouter free models — along with a ready-to-use opencode.example.json template, MCP (GitHub/ComfyUI) configuration, and mainland-China networking notes (npm mirror, proxy).

- 🔗 View Repository + 🔗 View Repository
- kickstart.opencode - A heavily commented OpenCode starter config that teaches you what everything does. + OpenCode Primer - Everything you need to know about OpenCode — a verified, release-tracked community guide.
- Inspired by kickstart.nvim. A minimal, well-commented OpenCode configuration designed as a starting point, not a framework. Every decision is explained. Includes free-only models and MCPs, a plan/execute workflow with interview-style clarification, and a careful agent for supervised AI execution. Read it, understand it, make it yours. + A community field guide that goes from first prompt to power use — setup, prompt engineering, custom commands, agent skills, plugins, custom agents, MCP servers, Zen and Go billing, TUI mastery, and headless CI. Ships a worked example .opencode/ directory (agents, commands, plugins, skills), seven drop-in specialist agent prompts, and MCP walkthroughs. Every version pin, price, and flag is verified against the current OpenCode release with a visible last-reviewed date.

- 🔗 View Repository -
-
- -
- Opencode Config Starter - Flexible config starting point -
- A powerful custom opencode configuration with agents, commands, rules, skills, and pre-configured MCP server. -

- 🔗 View Repository -
-
- -
- RunAPI MCP - MCP server for model API jobs -
- RunAPI MCP lets coding agents discover models, check pricing, and create image, video, music/audio, text-to-speech, and LLM tasks through RunAPI. -

- 🔗 View Repository + 🔗 View Repository

-➕ Add a Resource via PR +➕ Add a Resource


@@ -2167,7 +5032,7 @@ template (cowork-with-github). Install: drag-and-drop .plugin into Cowork.

🤝 Contributing

Found an Awesome Opencode project?
-Submit a Pull Request to add it to the list! +Submit a Pull Request to add it to the list!

Released under CC0 1.0 Universal.
diff --git a/README.ru-RU.md b/README.ru-RU.md new file mode 100644 index 0000000..8123cd6 --- /dev/null +++ b/README.ru-RU.md @@ -0,0 +1,139 @@ + +
+ +
+ +Awesome Opencode +

+ + +

Awesome Opencode

+ + +

+Awesome +   +Opencode Stars +

+ + +

+English +   +简体中文 +   +Русский +

+ +
+ + +

Курируемый список плагинов, тем, агентов и ресурсов для Opencode.

+

AI-кодинг-агент для терминала, созданный командой Anomaly.

+ +
+ +[**ОФИЦИАЛЬНЫЕ**](#официальные) • [**ПЛАГИНЫ**](#plugins) • [**ТЕМЫ**](#themes) • [**АГЕНТЫ**](#agents) • [**ПРОЕКТЫ**](#projects) • [**РЕСУРСЫ**](#resources) + +
+
+ +
+ + + +
+ +

⭐️ Официальные репозитории

+ +| Проект | Stars | Описание | +| :--- | :--- | :--- | +| **[opencode](https://github.com/anomalyco/opencode)** | ![Stars](https://badgen.net/github/stars/anomalyco/opencode) | Официальный AI-кодинг-агент Opencode. | +| **[opencode-sdk-js](https://github.com/anomalyco/opencode-sdk-js)** | ![Stars](https://badgen.net/github/stars/anomalyco/opencode-sdk-js) | Официальный JavaScript/TypeScript SDK для Opencode. | +| **[opencode-sdk-go](https://github.com/anomalyco/opencode-sdk-go)** | ![Stars](https://badgen.net/github/stars/anomalyco/opencode-sdk-go) | Официальный Go SDK для Opencode. | +| **[opencode-sdk-python](https://github.com/anomalyco/opencode-sdk-python)** | ![Stars](https://badgen.net/github/stars/anomalyco/opencode-sdk-python) | Официальный Python SDK для Opencode. | + +
+ +
+ +
+🧩 ПЛАГИНЫ +
+ +> 📖 Содержание списка плагинов автоматически генерируется из основного README на английском. +> Полный список см. в [English README](README.md#plugins). + +
+➕ Добавить плагин через PR +
+ +
+ +
+ +
+🎨 ТЕМЫ +
+ +> 📖 Содержание списка тем автоматически генерируется из основного README на английском. +> Полный список см. в [English README](README.md#themes). + +
+➕ Добавить тему через PR +
+ +
+ +
+ +
+🤖 АГЕНТЫ +
+ +> 📖 Содержание списка агентов автоматически генерируется из основного README на английском. +> Полный список см. в [English README](README.md#agents). + +
+➕ Добавить агента через PR +
+ +
+ +
+ +
+🛠 ПРОЕКТЫ +
+ +> 📖 Содержание списка проектов автоматически генерируется из основного README на английском. +> Полный список см. в [English README](README.md#projects). + +
+➕ Добавить проект через PR +
+ +
+ +
+ +
+📚 РЕСУРСЫ +
+ +> 📖 Содержание списка ресурсов автоматически генерируется из основного README на английском. +> Полный список см. в [English README](README.md#resources). + +
+➕ Добавить ресурс через PR +
+ +

+ +
+

🤝 Участие

+Нашли отличный проект для Opencode?
+Отправьте Pull Request, чтобы добавить его в список! +

+Выпущено под лицензией CC0 1.0 Universal. +
diff --git a/README.zh-CN.md b/README.zh-CN.md new file mode 100644 index 0000000..343b1c2 --- /dev/null +++ b/README.zh-CN.md @@ -0,0 +1,139 @@ + +
+ +
+ +Awesome Opencode +

+ + +

Awesome Opencode

+ + +

+Awesome +   +Opencode Stars +

+ + +

+English +   +简体中文 +   +Русский +

+ +
+ + +

Opencode 插件、主题、智能体和资源的精选列表。

+

Opencode 是终端上的 AI 编程智能体,由 Anomaly 团队打造。

+ +
+ +[**官方仓库**](#官方仓库) • [**插件**](#plugins) • [**主题**](#themes) • [**智能体**](#agents) • [**项目**](#projects) • [**资源**](#resources) + +
+
+ +
+ + + +
+ +

⭐️ 官方仓库

+ +| 项目 | Stars | 描述 | +| :--- | :--- | :--- | +| **[opencode](https://github.com/anomalyco/opencode)** | ![Stars](https://badgen.net/github/stars/anomalyco/opencode) | 官方 Opencode AI 编程智能体。 | +| **[opencode-sdk-js](https://github.com/anomalyco/opencode-sdk-js)** | ![Stars](https://badgen.net/github/stars/anomalyco/opencode-sdk-js) | Opencode 官方 JavaScript/TypeScript SDK。 | +| **[opencode-sdk-go](https://github.com/anomalyco/opencode-sdk-go)** | ![Stars](https://badgen.net/github/stars/anomalyco/opencode-sdk-go) | Opencode 官方 Go SDK。 | +| **[opencode-sdk-python](https://github.com/anomalyco/opencode-sdk-python)** | ![Stars](https://badgen.net/github/stars/anomalyco/opencode-sdk-python) | Opencode 官方 Python SDK。 | + +
+ +
+ +
+🧩 插件 +
+ +> 📖 插件列表由英文主 README 自动生成。 +> 完整列表请查看 [English README](README.md#plugins)。 + +
+➕ 通过 PR 添加插件 +
+ +
+ +
+ +
+🎨 主题 +
+ +> 📖 主题列表由英文主 README 自动生成。 +> 完整列表请查看 [English README](README.md#themes)。 + +
+➕ 通过 PR 添加主题 +
+ +
+ +
+ +
+🤖 智能体 +
+ +> 📖 智能体列表由英文主 README 自动生成。 +> 完整列表请查看 [English README](README.md#agents)。 + +
+➕ 通过 PR 添加智能体 +
+ +
+ +
+ +
+🛠 项目 +
+ +> 📖 项目列表由英文主 README 自动生成。 +> 完整列表请查看 [English README](README.md#projects)。 + +
+➕ 通过 PR 添加项目 +
+ +
+ +
+ +
+📚 资源 +
+ +> 📖 资源列表由英文主 README 自动生成。 +> 完整列表请查看 [English README](README.md#resources)。 + +
+➕ 通过 PR 添加资源 +
+ +

+ +
+

🤝 贡献

+发现了优秀的 Opencode 相关项目?
+提交 Pull Request 将其添加到列表中! +

+基于 CC0 1.0 Universal 发布。 +
diff --git a/contributing.md b/contributing.md index 232146d..dcacefd 100644 --- a/contributing.md +++ b/contributing.md @@ -1,60 +1,71 @@ # Contribution Guidelines -Thank you for contributing to `awesome-opencode`! Add your entries via YAML files—no need to edit README.md directly. +Thank you for contributing to `awesome-opencode`! Every entry is a YAML file under `data/`; the README and the [search site](https://heretek-ai.github.io/awesome-opencode/) are generated from those files. **Never edit `README.md` directly**: PRs that do are rejected by the `validate` check. -## How to Add an Entry +## Option 1: the issue form (recommended) -### Step 1: Fork & Clone +[Open an "Add an entry" issue](https://github.com/Heretek-AI/awesome-opencode/issues/new?template=add-entry.yml). A bot validates the fields, checks OpenCode V2 compatibility for plugins, comments with the result, and opens the pull request for you. To fix something, edit the issue; the PR updates itself. -```bash -git clone https://github.com/YOUR-USERNAME/awesome-opencode.git -cd awesome-opencode -``` +## Option 2: a pull request -### Step 2: Create YAML File +1. Fork and clone the repo, then run `npm ci`. +2. Create the entry. The scaffolder writes a correctly formatted file and runs the V2 check: -Create a YAML file in the appropriate category folder under `data/`: -- `data/plugins/` - OpenCode plugins and extensions -- `data/themes/` - Color schemes and visual themes -- `data/agents/` - AI agents and subagents -- `data/projects/` - Tools, GUIs, integrations, and utilities -- `data/resources/` - Guides, templates, and configurations + ```bash + npm run new -- --category plugins --repo https://github.com/owner/repo \ + --tagline "Short summary" --topics memory,context [--npm package-name] [--path packages/x] + ``` -**Filename:** kebab-case (e.g., `my-plugin.yaml`) + Or write `data//.yaml` by hand (kebab-case filename): -### Step 3: Add YAML Content + ```yaml + name: Quota Board + repo: https://github.com/owner/opencode-quota-board + npm: opencode-quota-board + tagline: Provider quotas and reset countdowns in the OpenCode sidebar + description: Adds quota bars, reset countdowns and credit balances to the OpenCode V2 TUI. + kind: plugin + topics: + - cost + - providers + compat: v2 + ``` -```yaml -name: Your Plugin Name -repo: https://github.com/owner/repo-name -tagline: Short punchy summary (max 120 chars, shown in collapsed view) -description: Longer description explaining what it does and why it's useful. -``` +3. Run `npm run validate`, then open the PR. CI runs the same checks and comments with anything to fix. -### Step 4: Submit PR +## Fields -```bash -git checkout -b add-my-plugin -git add data/plugins/my-plugin.yaml -git commit -m "docs: add my-plugin to plugins" -git push origin add-my-plugin -``` +| Field | Required | Notes | +| :--- | :--- | :--- | +| `name` | yes | Max 80 characters | +| `repo` | yes | Repository **root** URL (GitHub, GitLab, Codeberg, Gitee; gists allowed). No `/tree/`, `/blob/`, npm pages or websites | +| `path` | no | Folder inside a monorepo, e.g. `packages/my-plugin` | +| `npm` | no | Package name; strongly recommended for plugins (used for the V2 check and health checks) | +| `tagline` | yes | Max 120 characters. Quote it if it contains `: ` (e.g. `tagline: "Plain: no jargon"`) | +| `description` | yes | Max 1500 characters | +| `kind` | yes | `plugin`, `theme`, `agent`, `skill`, `mcp-server`, `client`, `tool`, `config`, `guide` or `fork` | +| `topics` | yes | 1–3 of: memory, context, orchestration, workflow, providers, cost, notifications, sessions, code-quality, security, git, remote, web, ui, voice, media, docs, environment, observability, integrations, code-intel, prompting, domain. The first is used for README grouping | +| `compat` | plugins | `v2`, `v1` or `unknown`; CI verifies it. Other categories may omit it | +| `also` | no | Secondary kinds, e.g. `[mcp-server]` for a plugin that also ships an MCP server | +| `scope`, `tags`, `min_version`, `homepage`, `installation` | no | See [docs/schema-design.md](docs/schema-design.md) | -Open a Pull Request on GitHub. +Unknown fields are rejected, so typos like `repository:` or `install:` are caught. -## Entry Requirements +Which category? `plugins` for OpenCode plugin packages, `themes` for color themes, `agents` for agent configs and skill packs, `projects` for clients, GUIs, MCP servers, tools and forks, `resources` for guides, configs and starters. -- [ ] **Relevant** - Directly related to OpenCode -- [ ] **Public** - Repository is publicly accessible -- [ ] **Maintained** - Active commits within the last 6 months -- [ ] **Unique** - Not a duplicate of existing entry -- [ ] **Complete** - All required fields included +## What gets accepted -## What Happens After PR? +See the [catalog policy](docs/policy.md). In short: -1. **Validation runs** - Automated checks verify YAML format -2. **Maintainer review** - Content and relevance verified -3. **Merge** - Once approved -4. **README auto-generates** - List updates automatically +- **Relevant**: works with OpenCode. +- **Public**: the repository is public and not archived. +- **V2 for new plugins**: depends on `@opencode/plugin` and uses `Plugin.define`. V1 plugin PRs are held with the `needs-v2` label; a nightly job re-checks them and unblocks the PR automatically once the plugin migrates. +- **Unique**: one entry per repository (per `path` for monorepos). +- **No crypto**: no cryptocurrency, token or trading projects. -No need to edit README.md—it regenerates from YAML files. +## What happens after you submit + +1. **`validate` check**: schema, duplicates, generated-file edits and the V2 check. Required to merge. +2. **Triage**: a bot labels the PR (`ready`, `needs-v2`, `needs-metadata` or `needs-human`) and comments with the results. +3. **Maintainer review and merge.** +4. **README, registry and search site regenerate automatically.** diff --git a/data/agents/agentic.yaml b/data/agents/agentic.yaml index 7d98d8f..4d94b9e 100644 --- a/data/agents/agentic.yaml +++ b/data/agents/agentic.yaml @@ -2,3 +2,7 @@ name: Agentic repo: https://github.com/Cluster444/agentic tagline: Modular AI agents description: Modular AI agents and commands for structured software development with opencode. +kind: agent +topics: + - orchestration +compat: n/a diff --git a/data/agents/aware-code.yaml b/data/agents/aware-code.yaml new file mode 100644 index 0000000..2d94b6b --- /dev/null +++ b/data/agents/aware-code.yaml @@ -0,0 +1,8 @@ +name: AwareCode +repo: https://github.com/Wudi12317/aware-code +tagline: Documentation-aware coding protocol for OpenCode +description: A 5-phase meta-skill that enforces documentation-first coding. Scans project docs before writing code, remembers root causes of errors, reviews code quality and security, synchronizes docs after changes, and outputs structured summaries. Designed for OpenCode's skill system. +kind: skill +topics: + - docs +compat: n/a diff --git a/data/agents/claude-subagents.yaml b/data/agents/claude-subagents.yaml index 700057b..fbc94b8 100644 --- a/data/agents/claude-subagents.yaml +++ b/data/agents/claude-subagents.yaml @@ -2,3 +2,7 @@ name: Claude Subagents repo: https://github.com/VoltAgent/awesome-claude-code-subagents tagline: Claude Code subagents description: Comprehensive reference repository for production-ready Claude Code subagents. +kind: agent +topics: + - orchestration +compat: n/a diff --git a/data/agents/deliberation.yaml b/data/agents/deliberation.yaml index 1b88d0a..0d32290 100644 --- a/data/agents/deliberation.yaml +++ b/data/agents/deliberation.yaml @@ -1,13 +1,12 @@ name: deliberation repo: https://github.com/antonbabenko/deliberation tagline: Ask GPT, Gemini, Grok, or OpenRouter for a second opinion or a fix, as expert subagents over MCP -description: >- - Get a delegated second opinion or an actual fix from GPT (Codex), Gemini, Grok (xAI), - or OpenRouter. Seven expert subagents - Architect, Plan Reviewer, Scope Analyst, Code - Reviewer, Security Analyst, Researcher, and Debugger - plus the ask-gpt, ask-gemini, - ask-grok, ask-openrouter, ask-all, and consensus commands. Each one can advise - (read-only) or implement. ask-all asks every model at once and compares the answers; - consensus runs an arbiter loop until the models agree. +description: Get a delegated second opinion or an actual fix from GPT (Codex), Gemini, Grok (xAI), or OpenRouter. Seven expert subagents - Architect, Plan Reviewer, Scope Analyst, Code Reviewer, Security Analyst, Researcher, and Debugger - plus the ask-gpt, ask-gemini, ask-grok, ask-openrouter, ask-all, and consensus commands. Each one can advise (read-only) or implement. ask-all asks every model at once and compares the answers; consensus runs an arbiter loop until the models agree. +kind: agent +topics: + - orchestration + - providers +compat: n/a scope: - global - project diff --git a/data/agents/gem-team.yaml b/data/agents/gem-team.yaml index bef33c7..f7000c7 100644 --- a/data/agents/gem-team.yaml +++ b/data/agents/gem-team.yaml @@ -2,3 +2,8 @@ name: Gem Team repo: https://github.com/mubaidr/gem-team tagline: Self-Learning Multi-agent orchestration harness for spec-driven development and automated verification. description: Self-Learning Multi-agent orchestration harness for spec-driven development and automated verification. +kind: agent +topics: + - orchestration + - workflow +compat: n/a diff --git a/data/agents/goblin-logic-manager.yaml b/data/agents/goblin-logic-manager.yaml new file mode 100644 index 0000000..ed0fedf --- /dev/null +++ b/data/agents/goblin-logic-manager.yaml @@ -0,0 +1,9 @@ +name: Goblin-Logic-Manager +repo: https://github.com/es-3581100/Goblin-Logic-Manager +tagline: Model-aware OpenCode agent with skill routing, bounded execution, durable closeout, and cold-session recovery. +description: A model-expandable OpenCode development-agent system that separates stable development behavior from thin model-specific overlays, with skill routing, bounded waits, evidence-backed verification, durable chunk closeout, and cold-session recovery. +kind: agent +topics: + - workflow + - providers +compat: n/a diff --git a/data/agents/iamhumans.yaml b/data/agents/iamhumans.yaml new file mode 100644 index 0000000..5977fb9 --- /dev/null +++ b/data/agents/iamhumans.yaml @@ -0,0 +1,8 @@ +name: iamhumans +repo: https://github.com/hoainho/iamhumans +tagline: Teaches Claude to stop performing empathy and start being present. 99/100 on a 100-case eval. +description: An opencode skill (~200 lines) that removes sycophancy, lecturing, and performed empathy from Claude's emotional responses. Teaches the shape of human conversation — when to be short, when to sit with something, when the right reply is "oh." Ships with a 100-case eval corpus and a baseline comparison showing +89.4 point skill delta over default Claude (1/20 PASS baseline vs 99/100 with skill). Load for human-shaped conversations (grief, decisions, vent, small talk). Don't load for code generation. +kind: skill +topics: + - prompting +compat: n/a diff --git a/data/agents/llm-roundtable.yaml b/data/agents/llm-roundtable.yaml new file mode 100644 index 0000000..620d1a4 --- /dev/null +++ b/data/agents/llm-roundtable.yaml @@ -0,0 +1,21 @@ +name: llm-roundtable +repo: https://github.com/dinhkarate/llm-roundtable +homepage: https://dinhkarate.github.io/llm-roundtable/ +tagline: Six models from five vendors vote on choices, plans and PRs when an unattended agent would stop to ask you +description: "Agent Skill plus a stdlib-only Python script (MIT). When an unattended coding agent would stop to ask its user to choose, approve, or review, it convenes a council through each vendor's CLI: Claude Fable and Opus (claude), GPT (codex), Grok (grok), Gemini (agy), and the newest free OpenCode model (opencode, no login needed). Round 1 is blind, round 2 is an anonymous cross-examination (M1..Mn), peers rate each other's evidence 0-2, and a weighted vote decides with no chairman model; an undecided council falls back to a safe default. Seats run read-only and sandboxed. Review mode returns APPROVE/CHANGES/REJECT for plans and PRs. Runs from OpenCode as the host too; --private drops free-model seats that may train on prompts." +kind: skill +topics: + - orchestration + - code-quality +compat: n/a +tags: + - skill + - multi-model + - council + - voting + - code-review +installation: | + ```bash + npx skills add dinhkarate/llm-roundtable --skill llm-roundtable + npx llm-roundtable doctor --probe + ``` diff --git a/data/agents/nerv.yaml b/data/agents/nerv.yaml index c2dde99..a210457 100644 --- a/data/agents/nerv.yaml +++ b/data/agents/nerv.yaml @@ -1,4 +1,9 @@ name: NERV -repo: https://github.com/juanmanueldaza/nerv +repo: https://github.com/juanmanueldaza/n3rv tagline: Invisible engineering infrastructure for AI agents description: Spec-Driven Development pipeline, A2A task delegation hub, persistent semantic memory (MAGI), and 9 specialized subagents for OpenCode. Scaffolds 45+ files via `nerv init` including SDD skills, slash commands, MCP servers, and lifecycle plugins. +kind: agent +topics: + - workflow + - orchestration +compat: n/a diff --git a/data/agents/opencode-agent-orchestration-kit.yaml b/data/agents/opencode-agent-orchestration-kit.yaml new file mode 100644 index 0000000..71cf069 --- /dev/null +++ b/data/agents/opencode-agent-orchestration-kit.yaml @@ -0,0 +1,9 @@ +name: OpenCode Agent Orchestration Kit +repo: https://github.com/jcarlosrodicio/opencode-agent-orchestration-kit +tagline: Structured product-development workflows +description: A reproducible OpenCode configuration kit with specialized agents, structured handoffs for research, design, specification, implementation, and review, plus local skills, validation checks, safe installation, and optional design integrations. +kind: skill +topics: + - orchestration + - workflow +compat: n/a diff --git a/data/agents/opencode-agents.yaml b/data/agents/opencode-agents.yaml index 5cc101f..b5bda9b 100644 --- a/data/agents/opencode-agents.yaml +++ b/data/agents/opencode-agents.yaml @@ -1,4 +1,8 @@ name: Opencode Agents -repo: https://github.com/darrenhinde/opencode-agents +repo: https://github.com/darrenhinde/OpenAgentsControl tagline: Enhanced workflows description: A set of opencode configurations, prompts, agents, and plugins for enhanced development workflows. +kind: agent +topics: + - workflow +compat: v1 diff --git a/data/agents/opencode-redstone.yaml b/data/agents/opencode-redstone.yaml index 7eb1419..8b5c30b 100644 --- a/data/agents/opencode-redstone.yaml +++ b/data/agents/opencode-redstone.yaml @@ -1,4 +1,8 @@ name: Redstone repo: https://github.com/BackGwa/Redstone tagline: AI-built Minecraft plugins -description: an Opencode agent that simplifies Minecraft plugin development and deployment. +description: an Opencode agent that simplifies Minecraft plugin development and deployment. +kind: agent +topics: + - domain +compat: n/a diff --git a/data/agents/opencode-roundtable.yaml b/data/agents/opencode-roundtable.yaml new file mode 100644 index 0000000..da429ea --- /dev/null +++ b/data/agents/opencode-roundtable.yaml @@ -0,0 +1,9 @@ +name: opencode-roundtable +repo: https://github.com/NeoMei/opencode-roundtable +tagline: Multi-agent roundtable discussion skill with per-member model routing and meeting minutes +description: A roundtable discussion (圆桌讨论) skill for opencode — TUI, CLI and Desktop. Pick members one by one via inline cards (role, persona, model — any provider); each member is a real subagent run via opencode run -m provider/model, a neutral host summarizes each round, and on termination a structured meeting-minutes Markdown file is written. Uses only built-in primitives — no plugin required. +kind: skill +topics: + - orchestration + - providers +compat: n/a diff --git a/data/agents/pdca-skills.yaml b/data/agents/pdca-skills.yaml new file mode 100644 index 0000000..fb2a146 --- /dev/null +++ b/data/agents/pdca-skills.yaml @@ -0,0 +1,49 @@ +name: PDCA Skills +repo: https://github.com/AlexeyShirshov/skills +tagline: "PDCA orchestration skills: PLAN → DO → CHECK → ACT with evidence-based verification" +description: |- + A family of four OpenCode skills that drive a task through a PDCA cycle + (PLAN → DO → CHECK → ACT) with transition gates, evidence-based verification, + escalation accounting, durable status, and recovery after compaction. + + - **pdca** — domain-neutral cycle; the task's PLAN selects the means and the verification method. + - **pdca-coder** — stack-agnostic executor for software tasks (code, tests, docs, refactoring, config). + - **pdca-dotnet** — the same cycle tuned for .NET/C# repositories. + - **pdca-collection** — a batch of tasks run as parallel PDCA lanes (worktree per group, `--no-ff` merge of completed groups). + + Roles (planner, coder, check, scout, escalate) are bound by the host, so the + skills stay model- and provider-neutral. +kind: skill +topics: + - workflow + - code-quality +compat: n/a +scope: + - global + - project +tags: + - skills + - pdca + - orchestration + - subagents + - workflow + - verification +min_version: 1.0.0 +installation: | + Copy the skills you want into an OpenCode skills directory. + + Global (all projects): + ```sh + git clone https://github.com/AlexeyShirshov/skills + cp -r skills/opencode/pdca skills/opencode/pdca-coder \ + skills/opencode/pdca-dotnet skills/opencode/pdca-collection \ + ~/.config/opencode/skills/ + ``` + + Per project: + ```sh + mkdir -p .opencode/skills + cp -r skills/opencode/pdca* .opencode/skills/ + ``` + + Invoke a skill by name, for example `pdca-coder` for "by the cycle" code tasks. diff --git a/data/agents/python-agent.yaml b/data/agents/python-agent.yaml index d4c0988..5a46622 100644 --- a/data/agents/python-agent.yaml +++ b/data/agents/python-agent.yaml @@ -2,3 +2,7 @@ name: Python Expert Agent for OpenCode repo: https://github.com/amrahman90/python-expert-agent tagline: Python Expert Agent toolkit for OpenCode with subagents and skills description: A custom configurable agent toolkit includes 1 Primary Custom Agent python-expert with intelligent skill loading, Predefined Specialized Subagents for Code generation, review, testing, and exploration, On-Demand Skills for Python development projects, Context Files for Standards, patterns, and security guidelines. +kind: agent +topics: + - code-intel +compat: n/a diff --git a/data/agents/review-pro.yaml b/data/agents/review-pro.yaml new file mode 100644 index 0000000..80cef47 --- /dev/null +++ b/data/agents/review-pro.yaml @@ -0,0 +1,18 @@ +name: review-pro +repo: https://github.com/tufantunc/review-pro +tagline: Tiered code review - triage picks the relevant specialists, they run in parallel, synthesis returns one verdict +description: Splits code review into three stages. A triage pass classifies the diff and selects which of thirteen specialist reviewers to dispatch - security, correctness, craft, ai-antipatterns, dry, performance, backend, frontend, a11y, db, api-contract, tests, spec - each with its own rubric and scoped context. The selected reviewers run in parallel, then a synthesis pass dedups overlapping findings, resolves conflicts by domain ownership, calibrates severity, and emits one verdict. Sixteen stack packs add language and framework specific signals from the repository's .review-pro/ directory. +kind: agent +topics: + - code-quality + - orchestration +compat: n/a +scope: + - global + - project +tags: + - code-review + - subagents + - skills + - security + - ai-code diff --git a/data/agents/sec-af.yaml b/data/agents/sec-af.yaml new file mode 100644 index 0000000..bbc2bf3 --- /dev/null +++ b/data/agents/sec-af.yaml @@ -0,0 +1,9 @@ +name: SEC-AF +repo: https://github.com/Agent-Field/sec-af +tagline: Multi-agent security auditor — orchestrates a 250+ agent swarm that proves exploitability, SARIF for CI +description: Multi-agent security auditor. Orchestrates a 250+ agent swarm to find vulnerabilities and prove they're exploitable — not just flag patterns. SARIF output for GitHub Actions integration. Apache 2.0. +kind: agent +topics: + - security + - orchestration +compat: n/a diff --git a/data/agents/server-manager.yaml b/data/agents/server-manager.yaml index ab3ea0d..9bfba7f 100644 --- a/data/agents/server-manager.yaml +++ b/data/agents/server-manager.yaml @@ -1,7 +1,12 @@ name: server-manager repo: https://github.com/workdocyeye/server-manager +homepage: https://github.com/workdocyeye/server-manager tagline: Non-blocking background server management — start, track, and stop local dev servers without blocking your AI session. description: Start, track, and stop local dev servers in the background — without blocking your AI conversation. Supports Node.js, Python, Go, .NET, Java, Rust, PHP and any framework that runs a dev server. JSON state persistence, per-project log files, HTTP health checks, and log tail/grep for debugging. +kind: agent +topics: + - environment +compat: n/a scope: - global - project @@ -16,4 +21,3 @@ installation: | - OpenCode: `~/.config/opencode/skills/server-manager/` - Claude Code: `~/.claude/skills/server-manager/` - Project-level: `.opencode/skills/` or `.claude/skills/` in your project root -homepage: https://github.com/workdocyeye/server-manager diff --git a/data/agents/shipframe.yaml b/data/agents/shipframe.yaml new file mode 100644 index 0000000..6e44149 --- /dev/null +++ b/data/agents/shipframe.yaml @@ -0,0 +1,19 @@ +name: ShipFrame +repo: https://github.com/juanitourquiza/shipframe +homepage: https://shipframe.hackeruna.com/ +tagline: AI coding workflows for OpenCode, Claude Code, and Codex +description: AI coding workflow toolkit with installable OpenCode skills, converted agents, project profiles, release evidence, and disciplined PR/MR workflows. +kind: skill +topics: + - workflow +compat: n/a +scope: + - global + - project +tags: + - workflow + - skills + - agents + - release + - codex + - claude-code diff --git a/data/agents/strray.yaml b/data/agents/strray.yaml new file mode 100644 index 0000000..9ec2643 --- /dev/null +++ b/data/agents/strray.yaml @@ -0,0 +1,8 @@ +name: StringRay +repo: https://github.com/htafolla/StringRay +tagline: OpenCode orchestration framework with AI agents +description: A production-ready orchestration framework for OpenCode with multi-agent coordination, enforcement pipeline, codex compliance, and intelligent task routing. Includes 21 built-in processors, 60+ codex validators, and autonomous reporting. +kind: agent +topics: + - orchestration +compat: n/a diff --git a/data/agents/swe-af.yaml b/data/agents/swe-af.yaml new file mode 100644 index 0000000..668f5d8 --- /dev/null +++ b/data/agents/swe-af.yaml @@ -0,0 +1,10 @@ +name: SWE-AF +repo: https://github.com/Agent-Field/SWE-AF +tagline: Autonomous software engineering agent team — orchestrates a 400+ agent swarm for planning, coding, testing, and review +description: Autonomous software engineering agent team. Orchestrates a 400+ agent swarm across the full development lifecycle from a single API call. Apache 2.0. +kind: agent +topics: + - orchestration + - workflow + - code-quality +compat: n/a diff --git a/data/examples/README.md b/data/examples/README.md index f9c7928..9234746 100644 --- a/data/examples/README.md +++ b/data/examples/README.md @@ -15,7 +15,7 @@ When adding a new entry to `data/{category}/`, use the corresponding example as | `data/agents/` | [agent.yaml](agent.yaml) | | `data/projects/` | [project.yaml](project.yaml) | | `data/resources/` | [resource.yaml](resource.yaml) | -| `data/forks/` | [fork.yaml](fork.yaml) | +| `data/projects/` (`kind: fork`) | [fork.yaml](fork.yaml) | ## Required vs Optional Fields diff --git a/data/examples/agent.yaml b/data/examples/agent.yaml index 9ebd7d0..d48fefd 100644 --- a/data/examples/agent.yaml +++ b/data/examples/agent.yaml @@ -16,6 +16,10 @@ description: A custom agent configuration for security-focused code review. - Predefined tools for vulnerability scanning - Skills for OWASP Top 10 detection +kind: agent # plugin, theme, agent, skill, mcp-server, client, tool, config, guide, fork +topics: # 1-3 from the fixed list in data/schema.json; the first is used for README grouping + - orchestration + # ============================================================================ # OPTIONAL FIELDS # ============================================================================ diff --git a/data/examples/fork.yaml b/data/examples/fork.yaml index 31734cf..2753204 100644 --- a/data/examples/fork.yaml +++ b/data/examples/fork.yaml @@ -1,6 +1,6 @@ # Example Fork Entry # Forks are modified builds of OpenCode with custom features or patches. -# Place actual entries in: data/forks/your-fork-name.yaml +# Place actual entries in: data/projects/your-fork-name.yaml # ============================================================================ # REQUIRED FIELDS @@ -17,6 +17,10 @@ description: A fork of OpenCode designed for enterprise environments. - Custom model routing - Air-gapped deployment support +kind: fork # plugin, theme, agent, skill, mcp-server, client, tool, config, guide, fork +topics: # 1-3 from the fixed list in data/schema.json; the first is used for README grouping + - environment + # ============================================================================ # OPTIONAL FIELDS # ============================================================================ diff --git a/data/examples/plugin.yaml b/data/examples/plugin.yaml index 7495182..02d07d8 100644 --- a/data/examples/plugin.yaml +++ b/data/examples/plugin.yaml @@ -15,6 +15,11 @@ description: A longer description explaining the plugin in detail. - Use cases - Key benefits +kind: plugin # plugin, theme, agent, skill, mcp-server, client, tool, config, guide, fork +topics: # 1-3 from the fixed list in data/schema.json; the first is used for README grouping + - workflow +compat: v2 # plugins only: v2, v1 or unknown (CI verifies it) + # ============================================================================ # OPTIONAL FIELDS # ============================================================================ diff --git a/data/examples/project.yaml b/data/examples/project.yaml index 3d1a9dd..0546337 100644 --- a/data/examples/project.yaml +++ b/data/examples/project.yaml @@ -18,6 +18,10 @@ description: A standalone web application for monitoring and managing - Token usage analytics - Multi-project overview +kind: client # plugin, theme, agent, skill, mcp-server, client, tool, config, guide, fork +topics: # 1-3 from the fixed list in data/schema.json; the first is used for README grouping + - sessions + # ============================================================================ # OPTIONAL FIELDS # ============================================================================ diff --git a/data/examples/resource.yaml b/data/examples/resource.yaml index 49f22e1..f6f1417 100644 --- a/data/examples/resource.yaml +++ b/data/examples/resource.yaml @@ -17,6 +17,10 @@ description: A Model Context Protocol (MCP) server that provides - Read-only query execution - Schema introspection +kind: guide # plugin, theme, agent, skill, mcp-server, client, tool, config, guide, fork +topics: # 1-3 from the fixed list in data/schema.json; the first is used for README grouping + - docs + # ============================================================================ # OPTIONAL FIELDS # ============================================================================ diff --git a/data/examples/theme.yaml b/data/examples/theme.yaml index 2001fda..37edd66 100644 --- a/data/examples/theme.yaml +++ b/data/examples/theme.yaml @@ -13,6 +13,10 @@ description: A dark theme designed for extended coding sessions. Features high contrast syntax highlighting and carefully chosen colors to reduce eye strain. +kind: theme # plugin, theme, agent, skill, mcp-server, client, tool, config, guide, fork +topics: # 1-3 from the fixed list in data/schema.json; the first is used for README grouping + - ui + # ============================================================================ # OPTIONAL FIELDS # ============================================================================ diff --git a/data/plugins/accint.yaml b/data/plugins/accint.yaml new file mode 100644 index 0000000..a1b6ee3 --- /dev/null +++ b/data/plugins/accint.yaml @@ -0,0 +1,8 @@ +name: AccInt +repo: https://github.com/maxbaluev/accreted-intelligence +tagline: Local Work Model memory for OpenCode agents +description: Accreted scored memory for OpenCode sessions with MCP retrieval and action verbs, lifecycle hooks, and cross-project acc.db continuity for agent work. +kind: plugin +topics: + - memory +compat: v1 diff --git a/data/plugins/aegis-devops.yaml b/data/plugins/aegis-devops.yaml new file mode 100644 index 0000000..ab4b600 --- /dev/null +++ b/data/plugins/aegis-devops.yaml @@ -0,0 +1,17 @@ +name: Aegis-DevOps +repo: https://github.com/moneytool/aegis-devops +tagline: Blocks kubectl delete, terraform destroy or DROP TABLE unless your signed policy allows it +description: A tool.execute.before plugin that checks every bash command OpenCode wants to run (kubectl, terraform/tofu, aws/az/gcloud, helm, argocd, git, SQL) against a signed, authority-checked policy before it runs. A rule only counts if it hasn't been edited since it was signed and its author was allowed to write that kind of rule, so a line planted in a ticket can't become policy. Only active in projects with a .aegis/ policy. Install with `pip install aegis-devops && aegis install opencode`. +kind: plugin +topics: + - security +compat: v1 +scope: + - global + - project +tags: + - security + - devops + - kubernetes + - terraform + - guardrails diff --git a/data/plugins/aftermath.yaml b/data/plugins/aftermath.yaml new file mode 100644 index 0000000..332cd0e --- /dev/null +++ b/data/plugins/aftermath.yaml @@ -0,0 +1,49 @@ +name: Aftermath +repo: https://github.com/moah0911/aftermath +tagline: Post-failure recovery for agents — stop, revert cheap damage, return to last-known-good +description: Aftermath is a post-failure recovery skill for OpenCode. When something breaks — a test suite goes green to red, the same error recurs, a destructive command looms, or the user says "you broke it" — it stops forward motion, reverts the actual bad hunk instead of patching around it, and returns the session to last-known-good. Includes four intensity levels (lite/full/ultra/off), four slash commands (status, revert, audit, log), and lifecycle tripwires for test failures, repeat errors, and destructive commands. +kind: plugin +topics: + - security + - workflow +compat: v1 +scope: + - global + - project +tags: + - productivity + - testing + - debugging + - safety +installation: | + ## Prerequisites + - OpenCode 1.0.0 or later + - Node.js 18+ + - git + + ## Installation + + ### Via curl (global) + ```bash + curl -fsSL https://raw.githubusercontent.com/moah0911/aftermath/main/scripts/install.sh \ + | bash -s -- + ``` + + ### Via npm + Add to your `opencode.json`: + ```json + { "plugin": ["@moah0911/aftermath"] } + ``` + + ### Project-only + ```bash + git clone https://github.com/moah0911/aftermath + node aftermath/scripts/install.js --project + ``` + + Restart OpenCode after installing (config loads at startup). + + ## Removal + ```bash + node scripts/install.js --uninstall + ``` diff --git a/data/plugins/agent-memory.yaml b/data/plugins/agent-memory.yaml index 8ff8611..06dd71e 100644 --- a/data/plugins/agent-memory.yaml +++ b/data/plugins/agent-memory.yaml @@ -1,4 +1,8 @@ name: Agent Memory -repo: https://github.com/joshuadavidthomas/opencode-agent-memory -tagline: Letta-inspired memory -description: Gives the agent persistent, self-editable memory blocks inspired by Letta agents. +repo: https://github.com/Ghilteras/opencode-agent-memory +tagline: Persistent, self-editable memory and a local semantic journal +description: Maintained OpenCode plugin providing shared global and project memory blocks, dedicated memory tools, and an opt-in append-only journal with local multilingual semantic search. +kind: plugin +topics: + - memory +compat: v2 diff --git a/data/plugins/agent-skills-jdt.yaml b/data/plugins/agent-skills-jdt.yaml index c62fe4a..77f8d72 100644 --- a/data/plugins/agent-skills-jdt.yaml +++ b/data/plugins/agent-skills-jdt.yaml @@ -2,3 +2,7 @@ name: Agent Skills (JDT) repo: https://github.com/joshuadavidthomas/opencode-agent-skills tagline: Dynamic skills loader description: Dynamic skills loader that discovers skills from project, user, and plugin directories. +kind: plugin +topics: + - prompting +compat: v1 diff --git a/data/plugins/aidevops.yaml b/data/plugins/aidevops.yaml new file mode 100644 index 0000000..77eaebc --- /dev/null +++ b/data/plugins/aidevops.yaml @@ -0,0 +1,10 @@ +name: AIDevOps +repo: https://github.com/marcusquinn/aidevops +homepage: https://aidevops.sh +tagline: AI DevOps framework and OpenCode plugin +description: OpenCode-first AI DevOps framework with agents, skills, workflows, safety hooks, memory, GitHub worker dispatch, and integrations for code, infrastructure, content, SEO, and operations. +kind: plugin +topics: + - orchestration + - environment +compat: v2 diff --git a/data/plugins/aion.yaml b/data/plugins/aion.yaml new file mode 100644 index 0000000..c0bfefc --- /dev/null +++ b/data/plugins/aion.yaml @@ -0,0 +1,22 @@ +name: AION +repo: https://github.com/ztxtech/aion +homepage: https://github.com/ztxtech/aion +tagline: Time-series harness with multi-agent review, skills, tools, and hooks +description: A compiled TypeScript OpenCode plugin that turns OpenCode into a time-series research harness. Bundles six specialized agents (orchestrator, requirements analyst, information collector, coder, and two critic roles), seventeen skills, twenty-plus tools, and eight coordination protocols into one self-contained bundle installed via a one-command CLI. Enforces a four-layer model (task, workspace, execution, review) with hard gates for data-leakage detection, ablation-backed statistical rigor, and dual-critic governance before any output ships. +kind: plugin +topics: + - orchestration + - code-quality +compat: v2 +scope: + - project +tags: + - agents + - time-series + - research + - review + - governance + - skills + - tools + - multi-agent +min_version: 0.9.0 diff --git a/data/plugins/antigravity-auth.yaml b/data/plugins/antigravity-auth.yaml index 071d352..4a2407e 100644 --- a/data/plugins/antigravity-auth.yaml +++ b/data/plugins/antigravity-auth.yaml @@ -2,3 +2,7 @@ name: Antigravity Auth repo: https://github.com/NoeFabris/opencode-antigravity-auth tagline: Google Antigravity models description: Use Gemini and Anthropic models for free via Google Antigravity IDE authentication. +kind: plugin +topics: + - providers +compat: v1 diff --git a/data/plugins/antigravity-multi-auth.yaml b/data/plugins/antigravity-multi-auth.yaml index 734d236..6b2e902 100644 --- a/data/plugins/antigravity-multi-auth.yaml +++ b/data/plugins/antigravity-multi-auth.yaml @@ -2,3 +2,7 @@ name: Antigravity Multi-Auth repo: https://github.com/theblazehen/opencode-antigravity-multi-auth tagline: Multiple Google accounts description: Fork of opencode-antigravity-auth that allows using multiple Google accounts with automatic rotation when rate limited. +kind: plugin +topics: + - providers +compat: v1 diff --git a/data/plugins/autotitle.yaml b/data/plugins/autotitle.yaml index 3499e4d..80d3801 100644 --- a/data/plugins/autotitle.yaml +++ b/data/plugins/autotitle.yaml @@ -2,3 +2,7 @@ name: Autotitle repo: https://github.com/pawelma/opencode-autotitle tagline: AI-powered automatic session naming description: Two-phase session titling - instant keyword titles on user message, refined AI titles after response. Auto-selects cheapest model (flash/haiku/fast), respects custom titles, zero configuration needed. +kind: plugin +topics: + - sessions +compat: v1 diff --git a/data/plugins/background-agents.yaml b/data/plugins/background-agents.yaml index 0cd3d83..3c9b2b8 100644 --- a/data/plugins/background-agents.yaml +++ b/data/plugins/background-agents.yaml @@ -2,3 +2,7 @@ name: Background Agents repo: https://github.com/kdcokenny/opencode-background-agents tagline: Async agent delegation description: Claude Code-style background agents with async delegation and context persistence. +kind: plugin +topics: + - orchestration +compat: v1 diff --git a/data/plugins/background.yaml b/data/plugins/background.yaml index 6db7188..24d9740 100644 --- a/data/plugins/background.yaml +++ b/data/plugins/background.yaml @@ -2,3 +2,7 @@ name: Background repo: https://github.com/zenobi-us/opencode-background tagline: Background process management description: Background process management plugin for opencode. +kind: plugin +topics: + - environment +compat: v1 diff --git a/data/plugins/basemind.yaml b/data/plugins/basemind.yaml new file mode 100644 index 0000000..a6b7ceb --- /dev/null +++ b/data/plugins/basemind.yaml @@ -0,0 +1,19 @@ +name: basemind +repo: https://github.com/Goldziher/basemind +npm: basemind-opencode +tagline: Full AI context layer over MCP — code-map, document RAG, agent memory, web crawl, git history +description: Full AI context layer over MCP — tree-sitter code-map, document RAG, shared agent memory, web crawl, and git history. 300+ languages. Published to npm as basemind-opencode (https://www.npmjs.com/package/basemind-opencode). +kind: plugin +also: + - mcp-server +topics: + - memory + - context + - code-intel +compat: v2 +installation: | + Add to your `opencode.json`: + + ```json + { "plugin": ["basemind-opencode@latest"] } + ``` diff --git a/data/plugins/beads-plugin.yaml b/data/plugins/beads-plugin.yaml index a2e27b2..6308b1a 100644 --- a/data/plugins/beads-plugin.yaml +++ b/data/plugins/beads-plugin.yaml @@ -2,3 +2,8 @@ name: Beads Plugin repo: https://github.com/joshuadavidthomas/opencode-beads tagline: Beads issue tracker integration description: Integration for Steve Yegge's beads issue tracker with /bd-* commands. +kind: plugin +topics: + - integrations + - workflow +compat: v1 diff --git a/data/plugins/brhp.yaml b/data/plugins/brhp.yaml index dd788b9..e462991 100644 --- a/data/plugins/brhp.yaml +++ b/data/plugins/brhp.yaml @@ -2,3 +2,7 @@ name: BRHP repo: https://github.com/ZanzyTHEbar/brhp tagline: Persistent planning state description: Structured, persistent planning for OpenCode with local session state, /brhp commands, bounded planner history, and a TUI sidebar. +kind: plugin +topics: + - workflow +compat: v1 diff --git a/data/plugins/cache-stats.yaml b/data/plugins/cache-stats.yaml new file mode 100644 index 0000000..511c897 --- /dev/null +++ b/data/plugins/cache-stats.yaml @@ -0,0 +1,9 @@ +name: cache-stats +repo: https://github.com/nmdra/opencode-cache-stats +tagline: Showing the active session's cache hit rate in a popup dialog +description: This plugin shows the overall cache hit rate, a per-model breakdown, a per subagent breakdown and the associated cost, making it easy to understand cache performance at a glance. +kind: plugin +topics: + - context + - observability +compat: v1 diff --git a/data/plugins/cc-safety-net.yaml b/data/plugins/cc-safety-net.yaml index 4a808f2..895905a 100644 --- a/data/plugins/cc-safety-net.yaml +++ b/data/plugins/cc-safety-net.yaml @@ -1,4 +1,8 @@ name: CC Safety Net -repo: https://github.com/kenryu42/claude-code-safety-net +repo: https://github.com/kenryu42/cc-safety-net tagline: Safety net catching destructive commands -description: A Claude Code plugin that acts as a safety net, catching destructive git and filesystem commands before they execute. \ No newline at end of file +description: A Claude Code plugin that acts as a safety net, catching destructive git and filesystem commands before they execute. +kind: plugin +topics: + - security +compat: v2 diff --git a/data/plugins/chisle.yaml b/data/plugins/chisle.yaml new file mode 100644 index 0000000..3098f6f --- /dev/null +++ b/data/plugins/chisle.yaml @@ -0,0 +1,18 @@ +name: Chisle +repo: https://github.com/JayPokale/Chisle +homepage: https://chisle.jaypokale.me +tagline: Cuts token use with terse answers, smallest-code-that-works rules and tool-output compression +description: Installs a ruleset for terse answers that keep every decisive fact and a "smallest code that works" ladder, Chisle skills, and a compression plugin that trims oversized tool output before it re-enters the context. The same ruleset ships for Claude Code, Cursor, Codex and Gemini CLI. Install with `npx chisle --only opencode`. MIT, zero dependencies, benchmarks with raw transcripts in the repository. +kind: plugin +topics: + - context + - cost + - prompting +compat: v1 +scope: + - global +tags: + - tokens + - cost + - context + - productivity diff --git a/data/plugins/cli-subagent-output.yaml b/data/plugins/cli-subagent-output.yaml index 4b9c90e..8b2a474 100644 --- a/data/plugins/cli-subagent-output.yaml +++ b/data/plugins/cli-subagent-output.yaml @@ -1,4 +1,9 @@ name: Subagent Reporter repo: https://github.com/raisbecka/opencode-subagent-output tagline: See exactly what your subagents are up to (in the terminal) when invoked during an `opencode run _____` session. -description: When opencode run is invoked normally, the actions of the primary agent are visible in the terminal, but subagent actions are not. This makes it difficult to follow progress on the prompt, and makes it very difficult to use `opencode run` as part of an unattended process or script. This plugin pipes subagent actions/events directly to stdout, prefixes them with the subagents name, and enumerates subagents when run in parallel for easy identification. This allows the user to follow along in realtime when subagents are running, and effectively trace execution at a later time. +description: When opencode run is invoked normally, the actions of the primary agent are visible in the terminal, but subagent actions are not. This makes it difficult to follow progress on the prompt, and makes it very difficult to use `opencode run` as part of an unattended process or script. This plugin pipes subagent actions/events directly to stdout, prefixes them with the subagents name, and enumerates subagents when run in parallel for easy identification. This allows the user to follow along in realtime when subagents are running, and effectively trace execution at a later time. +kind: plugin +topics: + - orchestration + - observability +compat: v1 diff --git a/data/plugins/codemem.yaml b/data/plugins/codemem.yaml new file mode 100644 index 0000000..4b8b5bd --- /dev/null +++ b/data/plugins/codemem.yaml @@ -0,0 +1,10 @@ +name: codemem +repo: https://github.com/kunickiaj/codemem +homepage: https://codemem.sh +tagline: Persistent coding memory across sessions, machines, and teammates +description: Captures coding decisions, discoveries, and fixes, with automatic context injection in OpenCode, Claude Code, and Codex. Includes MCP tools for searching and managing memories, a viewer, optional cross-machine sync, and sharing of selected projects with teammates. +kind: plugin +topics: + - memory + - sessions +compat: v2 diff --git a/data/plugins/command-inject.yaml b/data/plugins/command-inject.yaml index d3e28fa..3beede3 100644 --- a/data/plugins/command-inject.yaml +++ b/data/plugins/command-inject.yaml @@ -2,3 +2,7 @@ name: Command Inject repo: https://github.com/shihyuho/opencode-command-inject tagline: Auto-inject project commands into OpenCode description: Automatically discovers and injects Makefile targets, npm/pnpm/yarn/bun scripts, and local skills at startup. Type / to see and run all project commands. +kind: plugin +topics: + - prompting +compat: v1 diff --git a/data/plugins/context-analysis.yaml b/data/plugins/context-analysis.yaml index c4ac4f0..bbf1cbd 100644 --- a/data/plugins/context-analysis.yaml +++ b/data/plugins/context-analysis.yaml @@ -2,3 +2,8 @@ name: Context Analysis repo: https://github.com/IgorWarzocha/Opencode-Context-Analysis-Plugin tagline: Token usage analysis description: An opencode plugin that provides detailed token usage analysis for your AI sessions. +kind: plugin +topics: + - context + - cost +compat: v1 diff --git a/data/plugins/context-optimizer.yaml b/data/plugins/context-optimizer.yaml new file mode 100644 index 0000000..1a2dc5e --- /dev/null +++ b/data/plugins/context-optimizer.yaml @@ -0,0 +1,8 @@ +name: Context Optimizer +repo: https://github.com/evermeer/context-optimizer +tagline: Coding Agent Context Optimizer Plugin +description: Keep your coding agent's context small. When a session gets compacted, Context Optimizer reranks the relevant parts, drops duplicates, and compresses the rest with a local ML pipeline (LLMLingua-2 + Sentence Transformers) — so more of the window stays useful and fewer tokens get billed. Everything runs on your machine. +kind: plugin +topics: + - context +compat: v2 diff --git a/data/plugins/contextstream.yaml b/data/plugins/contextstream.yaml new file mode 100644 index 0000000..804fdbb --- /dev/null +++ b/data/plugins/contextstream.yaml @@ -0,0 +1,36 @@ +name: ContextStream +repo: https://github.com/contextstream/mcp-server +homepage: https://contextstream.io +tagline: Shared project context for OpenCode, Cursor, Claude Code, Codex, and Grok via MCP +description: Hosted MCP server that keeps coding agents on shared project context across sessions and teammates. Works with OpenCode and other MCP-compatible clients. Endpoint https://mcp.contextstream.io/mcp — Intelligence isn’t the bottleneck. Context is. +kind: plugin +also: + - mcp-server +topics: + - context + - memory +compat: v2 +scope: + - global +tags: + - mcp + - context + - productivity + - collaboration +installation: | + ## Hosted MCP (recommended) + + Add to your OpenCode MCP config: + + ```json + { + "mcp": { + "contextstream": { + "url": "https://mcp.contextstream.io/mcp" + } + } + } + ``` + + Site: https://contextstream.io + OSS server: https://github.com/contextstream/mcp-server diff --git a/data/plugins/crawlberg.yaml b/data/plugins/crawlberg.yaml index 6099fcd..4b03cc4 100644 --- a/data/plugins/crawlberg.yaml +++ b/data/plugins/crawlberg.yaml @@ -1,7 +1,13 @@ name: Crawlberg -repo: https://github.com/xberg-io/plugins +repo: https://github.com/xberg-io/crawlberg +npm: "@xberg-io/opencode-crawlberg" +homepage: https://www.npmjs.com/package/@xberg-io/opencode-crawlberg tagline: Web crawling and scraping tools for opencode description: OpenCode plugin exposing crawlberg CLI tools for scraping pages, crawling sites, and mapping URLs to JSON or Markdown. +kind: plugin +topics: + - web +compat: v2 scope: - global - project @@ -10,7 +16,6 @@ tags: - scraping - markdown - cli -homepage: https://www.npmjs.com/package/@xberg-io/opencode-crawlberg installation: | Add the package to `opencode.json`: diff --git a/data/plugins/crewbee.yaml b/data/plugins/crewbee.yaml index 1fea2f5..c5b5cd7 100644 --- a/data/plugins/crewbee.yaml +++ b/data/plugins/crewbee.yaml @@ -2,3 +2,7 @@ name: CrewBee repo: https://github.com/CrewBeeLab/CrewBee tagline: Task-specific Agent Teams for OpenCode description: CrewBee is an independent Agent Team framework for OpenCode. It lets users define reusable task/project-specific Agent Teams, project them into OpenCode agents, and switch between single-agent execution and multi-agent collaboration based on task complexity. It also includes built-in Team templates such as a Coding Team with review flow and completion criteria. +kind: plugin +topics: + - orchestration +compat: v1 diff --git a/data/plugins/daily-journal.yaml b/data/plugins/daily-journal.yaml new file mode 100644 index 0000000..afff3e9 --- /dev/null +++ b/data/plugins/daily-journal.yaml @@ -0,0 +1,9 @@ +name: Daily Journal +repo: https://github.com/jianzhangg/opencode-daily-journal +tagline: Auto-journal every conversation into daily/YYYY-MM-DD.md, record-only (never injects) +description: "An OpenCode V2 plugin that keeps a daily journal of your conversations. When a session turn finishes, the exchange is summarized into a diary entry and appended to daily/YYYY-MM-DD.md. Record only, never inject: entries are plain Markdown on disk and are never added to session context unless you explicitly ask the agent to read them. Writes are concurrency-safe (file lock + append-only + idempotent markers, so simultaneous sessions never overwrite or duplicate each other), and summaries use a model fallback chain (session model, then other configured models, then a raw excerpt) so nothing is lost when a model is unavailable." +kind: plugin +topics: + - memory + - sessions +compat: v2 diff --git a/data/plugins/datacloak.yaml b/data/plugins/datacloak.yaml new file mode 100644 index 0000000..28d97f7 --- /dev/null +++ b/data/plugins/datacloak.yaml @@ -0,0 +1,16 @@ +name: DataCloak +repo: https://github.com/pratikwayal01/datacloak +tagline: Swap secrets and PII for realistic fakes before AI sees them; restore originals on return. +description: Local-first sensitive-data protection for OpenCode. Cloaks API keys, JWTs, PEMs, env vars, DSNs, emails, phones and IPs with Faker-generated synthetics pre-dispatch, blocks env-dump tool calls, redacts tool output, and auto-restores originals into file writes. Zero-config and fully automatic. +kind: plugin +topics: + - security +compat: v1 +scope: + - global +tags: + - security + - privacy + - secrets + - redaction +min_version: 1.18.0 diff --git a/data/plugins/deja.yaml b/data/plugins/deja.yaml new file mode 100644 index 0000000..38afe7f --- /dev/null +++ b/data/plugins/deja.yaml @@ -0,0 +1,32 @@ +name: deja +repo: https://github.com/vshulcz/deja-vu +npm: opencode-deja +tagline: Recall what you already did in your other coding agents +description: |- + opencode remembers its own sessions. deja answers the other question: what you did in Claude Code, Codex, Cursor, Gemini CLI, Zed and fifteen more agents on this machine — including the months before you installed anything. + + A local Go binary indexes the transcripts those agents already wrote to disk, and the plugin gives the model six tools over that index: recall past sessions by error or symbol, read the digest of one session, see which sessions discussed a file before you edit it, ask what this machine actually ran after a given error, and store a decision worth keeping. Recall also arrives unasked — once per session on the system prompt, and a relevance pass per prompt that stays silent when history has no answer. + + BM25 over local files. No LLM, no embeddings, no network. Credentials are redacted at index time. +kind: plugin +topics: + - memory + - sessions +compat: v2 +scope: + - global +tags: + - memory + - recall + - search + - cross-agent + - session-history +installation: | + ```json + { + "$schema": "https://opencode.ai/config.json", + "plugin": ["opencode-deja"] + } + ``` + + Then index once: `deja index`. The plugin ships the binary, but a deja you installed yourself (`brew install vshulcz/tap/deja-vu`, `go install`, or the install script) always wins. diff --git a/data/plugins/dejavu-gates.yaml b/data/plugins/dejavu-gates.yaml new file mode 100644 index 0000000..2da8840 --- /dev/null +++ b/data/plugins/dejavu-gates.yaml @@ -0,0 +1,11 @@ +name: dejavu +repo: https://github.com/WhiteBite/dejavu-gates +npm: dejavu-gates +tagline: Cross-session error gates for recurring tool-call failures +description: "Mechanically detects recurring tool-call failures (3 failures across 2 distinct sessions promote a gate) and enforces them: reminder on the next attempt, hard block on same-session repeat offense. Diagnostics never block, they annotate. Two-scope store with secret scrubbing and control-char stripping before persistence, 60-day TTL, self-healing reconcile, doctor report. One harness-neutral store shared with Claude Code, Codex CLI, Gemini CLI, Cursor, Copilot CLI, Crush, Devin CLI, Kiro and Cline. TypeScript + Bun, ships as source, no build step." +kind: plugin +topics: + - code-quality +compat: v2 +installation: | + { "plugin": ["dejavu-gates"] } in opencode.json (V1 key "plugin", V2 key "plugins") diff --git a/data/plugins/devcontainers.yaml b/data/plugins/devcontainers.yaml index 98507d6..ad4af6a 100644 --- a/data/plugins/devcontainers.yaml +++ b/data/plugins/devcontainers.yaml @@ -2,3 +2,8 @@ name: Devcontainers repo: https://github.com/athal7/opencode-devcontainers tagline: Multi-branch devcontainers description: Plugin for running multiple devcontainer instances with auto-assigned ports and branch-based isolation. +kind: plugin +topics: + - environment + - git +compat: v1 diff --git a/data/plugins/direnv.yaml b/data/plugins/direnv.yaml index ce3822c..6309c96 100644 --- a/data/plugins/direnv.yaml +++ b/data/plugins/direnv.yaml @@ -2,3 +2,7 @@ name: Direnv repo: https://github.com/simonwjackson/opencode-direnv tagline: Load direnv variables description: Automatically loads direnv environment variables at session start. Perfect for Nix flakes. +kind: plugin +topics: + - environment +compat: v1 diff --git a/data/plugins/ditto.yaml b/data/plugins/ditto.yaml new file mode 100644 index 0000000..3d8846f --- /dev/null +++ b/data/plugins/ditto.yaml @@ -0,0 +1,9 @@ +name: Ditto +repo: https://github.com/ohad6k/emulo +tagline: Mines your local AI coding session logs into a personal profile your agent loads before every task +description: Mines local AI coding session logs (OpenCode, Claude Code, Codex, Copilot CLI) into a personal working profile. The OpenCode adapter reads OpenCode's SQLite session store and installs the profile into OpenCode's global rules so the agent loads it before every task. Single stdlib-only Python file, runs locally, MIT licensed. +kind: plugin +topics: + - memory + - prompting +compat: unknown diff --git a/data/plugins/dodo-payments.yaml b/data/plugins/dodo-payments.yaml index 6333188..29e70dd 100644 --- a/data/plugins/dodo-payments.yaml +++ b/data/plugins/dodo-payments.yaml @@ -2,3 +2,7 @@ name: Dodo Payments repo: https://github.com/dodopayments/dodo-agent-plugin tagline: Payments, subscriptions, webhooks, and billing for OpenCode agents description: Official Dodo Payments plugin for OpenCode (also Claude Code, Codex, Cursor). Bundles eight integration skills (checkout, subscriptions, webhooks, usage-based billing, credits, license keys, BillingSDK, best practices) plus two MCP servers — a live API server with browser OAuth and a documentation search server. Distributed via npm as @dodopayments/opencode-plugin. +kind: plugin +topics: + - integrations +compat: v1 diff --git a/data/plugins/dynamic-context-pruning.yaml b/data/plugins/dynamic-context-pruning.yaml index 3618913..2fadb64 100644 --- a/data/plugins/dynamic-context-pruning.yaml +++ b/data/plugins/dynamic-context-pruning.yaml @@ -2,3 +2,8 @@ name: Dynamic Context Pruning repo: https://github.com/Tarquinen/opencode-dynamic-context-pruning tagline: Optimize token usage description: Plugin that optimises token usage by pruning obsolete tool outputs from conversation context. +kind: plugin +topics: + - context + - cost +compat: v2 diff --git a/data/plugins/ejentum-mcp.yaml b/data/plugins/ejentum-mcp.yaml index 9d47522..bbca42f 100644 --- a/data/plugins/ejentum-mcp.yaml +++ b/data/plugins/ejentum-mcp.yaml @@ -1,5 +1,12 @@ name: Ejentum repo: https://github.com/ejentum/ejentum-mcp +homepage: https://ejentum.com tagline: MCP server with reasoning, code, anti-deception, and memory tools for AI agents description: MCP server with four tools (harness_reasoning, harness_code, harness_anti_deception, harness_memory) that AI agents can call on demand. Each tool returns a structured prompt the calling agent ingests before generating. -homepage: https://ejentum.com +kind: plugin +also: + - mcp-server +topics: + - memory + - code-quality +compat: unknown diff --git a/data/plugins/envsitter-guard.yaml b/data/plugins/envsitter-guard.yaml index c5b0f53..d156d15 100644 --- a/data/plugins/envsitter-guard.yaml +++ b/data/plugins/envsitter-guard.yaml @@ -2,3 +2,7 @@ name: Envsitter Guard repo: https://github.com/boxpositron/envsitter-guard tagline: Prevent .env leaks description: OpenCode plugin that prevents agents/tools from reading or editing sensitive .env* files, while still allowing safe inspection via EnvSitter (keys + deterministic fingerprints; never values). +kind: plugin +topics: + - security +compat: v1 diff --git a/data/plugins/episodic-memory.yaml b/data/plugins/episodic-memory.yaml new file mode 100644 index 0000000..995c28b --- /dev/null +++ b/data/plugins/episodic-memory.yaml @@ -0,0 +1,14 @@ +name: Episodic Memory +repo: https://github.com/robertn702/opencode-episodic-memory +tagline: Semantic search over your past conversations — local embeddings, no cloud +description: Indexes your OpenCode session history into a local SQLite store and lets the agent recall past discussions, decisions, and patterns via native episodic_search/episodic_read tools. Fully local and offline — embeddings run in-process via Transformers.js (Snowflake arctic-embed, model chosen by empirical eval), with vector, BM25, and hybrid RRF search modes. Auto-reindexes on session idle; opt-out marker for sensitive chats. Inspired by obra/episodic-memory for Claude Code, rebuilt natively for OpenCode primitives. +kind: plugin +topics: + - memory + - sessions +compat: v2 +tags: + - memory + - semantic-search + - embeddings + - local-first diff --git a/data/plugins/esuyo-opencode-custom-provider.yaml b/data/plugins/esuyo-opencode-custom-provider.yaml new file mode 100644 index 0000000..454b766 --- /dev/null +++ b/data/plugins/esuyo-opencode-custom-provider.yaml @@ -0,0 +1,8 @@ +name: Esuyo Custom Provider +repo: https://github.com/8perezm/esuyo-opencode-custom-provider +tagline: Auto-discover models from any OpenAI-compatible gateway on startup +description: Opencode plugin that syncs /v1/models from any OpenAI-compatible gateway into providers. Global ~/.config/opencode or project .opencode config, {env:} / {file:} secrets, include/exclude regex, and zero manual model maintenance. +kind: plugin +topics: + - providers +compat: v2 diff --git a/data/plugins/flowdeck.yaml b/data/plugins/flowdeck.yaml index dcac775..4cd4efc 100644 --- a/data/plugins/flowdeck.yaml +++ b/data/plugins/flowdeck.yaml @@ -1,7 +1,8 @@ name: FlowDeck repo: https://github.com/DVNghiem/FlowDeck +homepage: https://github.com/DVNghiem/FlowDeck#readme tagline: AI-powered multi-agent workflow orchestration with built-in safety intelligence -description: | +description: |- FlowDeck adds a structured, multi-agent development workflow to OpenCode. It coordinates 25 specialist agents through a four-phase cycle — discuss, plan, execute, review — with persistent state that survives session restarts. Key features: @@ -16,6 +17,12 @@ description: | - Built-in MCPs: Context7 (docs), Exa (web search), Grep.app (code search) - Ensemble Reasoning via `/fd-council` for synthesized consensus from multiple agents - Persistent Memory with SQLite for tool executions and session summaries +kind: plugin +topics: + - orchestration + - workflow + - security +compat: v1 scope: - global tags: @@ -27,8 +34,7 @@ tags: - TDD - skills - commands -min_version: "1.0.0" -homepage: https://github.com/DVNghiem/FlowDeck#readme +min_version: 1.0.0 installation: | ### Method 1: curl (recommended) ```bash diff --git a/data/plugins/forloop-planner.yaml b/data/plugins/forloop-planner.yaml index 7589c14..130b633 100644 --- a/data/plugins/forloop-planner.yaml +++ b/data/plugins/forloop-planner.yaml @@ -2,3 +2,8 @@ name: ForLoop Planner repo: https://github.com/forloop-cc/forloop-opencode-plugin-planner tagline: Autopilot development. Plan with ForLoop agent. Build, Test, Deploy on cloud in one go. description: ForLoop offers an all-in-one platform that covers the entire development lifecycle, from initial planning and coding to automated testing and cloud deployment. +kind: plugin +topics: + - workflow + - code-quality +compat: v1 diff --git a/data/plugins/froggy.yaml b/data/plugins/froggy.yaml index 7e0ac67..3ef67ca 100644 --- a/data/plugins/froggy.yaml +++ b/data/plugins/froggy.yaml @@ -1,4 +1,8 @@ name: Froggy repo: https://github.com/smartfrog/opencode-froggy -tagline: Hooks and specialized agents -description: Plugin providing Claude Code-style hooks, specialized agents, and tools like gitingest. +tagline: XP-guided multi-agent orchestration +description: Multi-agent delegation and orchestration guided by XP, KISS, and YAGNI, with specialized agents, independent code review, and a persistent loop to keep work moving toward the objective. +kind: plugin +topics: + - orchestration +compat: v2 diff --git a/data/plugins/gemini-auth.yaml b/data/plugins/gemini-auth.yaml index e39597c..7a458b4 100644 --- a/data/plugins/gemini-auth.yaml +++ b/data/plugins/gemini-auth.yaml @@ -2,3 +2,7 @@ name: Gemini Auth repo: https://github.com/jenslys/opencode-gemini-auth tagline: Google account auth description: Authenticate the Opencode CLI with your Google account so you can use your existing Gemini plan. +kind: plugin +topics: + - providers +compat: v2 diff --git a/data/plugins/godmode-aiimagined.yaml b/data/plugins/godmode-aiimagined.yaml new file mode 100644 index 0000000..de37102 --- /dev/null +++ b/data/plugins/godmode-aiimagined.yaml @@ -0,0 +1,9 @@ +name: Godmode +repo: https://github.com/AIimagined/Godmode +tagline: A local, tamper-evident record of what a coding agent did, what it claimed, and what was verified. +description: Godmode keeps a hash-chained local record of what a coding agent did, what it claimed, and what was verified, and refuses "done" without a citation. On OpenCode it runs as an AGENTS.md instruction adapter plus an optional Bun plugin shim (adapters/opencode/godmode.opencode.js) that routes every bash, write, edit and patch call through the same pre-tool gate the other hosts use and throws before a refused tool runs. Zero runtime dependencies, zero network use, nothing leaves the machine. +kind: plugin +topics: + - observability + - code-quality +compat: v1 diff --git a/data/plugins/godmode.yaml b/data/plugins/godmode.yaml new file mode 100644 index 0000000..f27ff21 --- /dev/null +++ b/data/plugins/godmode.yaml @@ -0,0 +1,9 @@ +name: Godmode +repo: https://github.com/arbazkhan971/godmode +tagline: "Discipline layer: measure → modify → verify → keep/revert" +description: Skill plugin with 135 skills and 7 subagents that adds a measure → modify → verify → keep/revert discipline loop to AI coding agents. Works with OpenCode alongside Claude Code, Codex, Cursor, and Gemini CLI. +kind: plugin +topics: + - workflow + - code-quality +compat: v2 diff --git a/data/plugins/google-ai-search.yaml b/data/plugins/google-ai-search.yaml index dae9125..53dc29f 100644 --- a/data/plugins/google-ai-search.yaml +++ b/data/plugins/google-ai-search.yaml @@ -2,3 +2,7 @@ name: Google AI Search repo: https://github.com/IgorWarzocha/Opencode-Google-AI-Search-Plugin tagline: Query Google AI Mode (SGE) description: An opencode plugin that exposes a native tool for querying Google AI Mode (SGE). +kind: plugin +topics: + - web +compat: v1 diff --git a/data/plugins/handoff.yaml b/data/plugins/handoff.yaml index f4c8ada..bd0f802 100644 --- a/data/plugins/handoff.yaml +++ b/data/plugins/handoff.yaml @@ -2,3 +2,7 @@ name: Handoff repo: https://github.com/joshuadavidthomas/opencode-handoff tagline: Session handoff prompts description: Creates focused handoff prompts for continuing work in a new session. +kind: plugin +topics: + - sessions +compat: v1 diff --git a/data/plugins/harness-memory.yaml b/data/plugins/harness-memory.yaml index 92390ef..ce4061f 100644 --- a/data/plugins/harness-memory.yaml +++ b/data/plugins/harness-memory.yaml @@ -2,3 +2,8 @@ name: Harness Memory repo: https://github.com/smc2315/harness-memory tagline: Persistent project memory - 73 percent fewer tokens than CLAUDE.md, with human review description: Auto-captures evidence from tool interactions and materializes memories through a multi-gate pipeline. 4-layer activation engine selects the right memories per context. Replaces CLAUDE.md with structured, searchable, reviewable project memory. Local-first (sql.js WASM), zero cloud dependency. +kind: plugin +topics: + - memory + - context +compat: v1 diff --git a/data/plugins/hiai-opencode.yaml b/data/plugins/hiai-opencode.yaml index 9d6dbf3..515b325 100644 --- a/data/plugins/hiai-opencode.yaml +++ b/data/plugins/hiai-opencode.yaml @@ -2,3 +2,8 @@ name: hiai-opencode repo: https://github.com/HiAi-gg/hiai-opencode tagline: Canonical 12-agent model with bundled skills, MCP, LSP, and ralph-loop description: Unified plugin shipping 10 visible agents (Bob, Coder, Strategist, Critic, Guard, Researcher, Designer, Manager, Brainstormer, Vision) plus hidden Sub and Agent Skills. Bundles MCP wiring (playwright, stitch, sequential-thinking, firecrawl, rag, mempalace, context7, websearch, grep_app), LSP, skill materialization, and a multi-layer continuation system (todo enforcer, ralph-loop, ULTRAWORK auto-start) in one install. +kind: plugin +topics: + - orchestration + - workflow +compat: v1 diff --git a/data/plugins/homie.yaml b/data/plugins/homie.yaml new file mode 100644 index 0000000..45b8830 --- /dev/null +++ b/data/plugins/homie.yaml @@ -0,0 +1,16 @@ +name: homie +repo: https://github.com/prashanthgit19/homie +tagline: Four-level chat-voice personality layer — same code, different voice (off / yo / dawg / mafa) +description: A prompt-injection personality layer that changes how the agent talks in prose while leaving technical answers, code, and commands identical. Ships yo, dawg, and mafa registers plus an off switch, set with /homie. Same package also runs on Claude Code, Codex, and Pi. +kind: plugin +topics: + - prompting +compat: v2 +scope: + - global +tags: + - personality + - voice + - prompt + - hooks + - fun diff --git a/data/plugins/honcho.yaml b/data/plugins/honcho.yaml index 64facfd..fd0fc21 100644 --- a/data/plugins/honcho.yaml +++ b/data/plugins/honcho.yaml @@ -2,3 +2,7 @@ name: Honcho repo: https://github.com/plastic-labs/opencode-honcho tagline: AI-native long-term memory for OpenCode description: Give OpenCode persistent memory that survives context wipes, session restarts, and fresh chats. Honcho remembers what you're working on, durable preferences, and prior context across projects. Supports cloud and self-hosted deployments with configurable session strategies. +kind: plugin +topics: + - memory +compat: v2 diff --git a/data/plugins/html-to-markdown.yaml b/data/plugins/html-to-markdown.yaml index e185660..1cacf38 100644 --- a/data/plugins/html-to-markdown.yaml +++ b/data/plugins/html-to-markdown.yaml @@ -1,7 +1,13 @@ name: HTML to Markdown -repo: https://github.com/xberg-io/plugins +repo: https://github.com/xberg-io/html-to-markdown +npm: "@xberg-io/opencode-html-to-markdown" +homepage: https://www.npmjs.com/package/@xberg-io/opencode-html-to-markdown tagline: Fast, lossless HTML to Markdown conversion description: OpenCode plugin exposing html-to-markdown CLI tools for converting HTML to clean Markdown with metadata, tables, and document structure. +kind: plugin +topics: + - web +compat: v2 scope: - global - project @@ -10,7 +16,6 @@ tags: - markdown - conversion - cli -homepage: https://www.npmjs.com/package/@xberg-io/opencode-html-to-markdown installation: | Add the package to `opencode.json`: diff --git a/data/plugins/image-reader-relay.yaml b/data/plugins/image-reader-relay.yaml new file mode 100644 index 0000000..0d068b9 --- /dev/null +++ b/data/plugins/image-reader-relay.yaml @@ -0,0 +1,35 @@ +name: Image Reader Relay +repo: https://github.com/massiveits/image-reader-relay +tagline: Let text-only models read pasted images via a vision model (OpenCode plugin) +description: |- + OpenCode plugin that lets text-only models read images pasted into a session. + Stashes pasted images in memory, injects a note into the model's context only, + and registers a `read_image` tool the main model calls with its own question — + relaying the image to a configurable vision model in a throwaway session, then + cleaning up. Models that support images natively are left untouched. +kind: plugin +topics: + - media +compat: v1 +scope: + - global + - project +tags: + - images + - vision + - multimodal + - productivity +installation: | + ## Prerequisites + - OpenCode with a tool-capable main model + - Access to a vision model via one of your providers + + ## Installation + Add to `opencode.json` (project) or `~/.config/opencode/opencode.json` (global): + ```json + { + "plugin": [ + ["massiveits/image-reader-relay", { "model": "clinepass/cline-pass/mimo-v2.5" }] + ] + } + ``` diff --git a/data/plugins/internet-court.yaml b/data/plugins/internet-court.yaml new file mode 100644 index 0000000..fffe52c --- /dev/null +++ b/data/plugins/internet-court.yaml @@ -0,0 +1,19 @@ +name: Internet Court +repo: https://github.com/internet-court/internet-court-skill +homepage: https://internetcourt.org +tagline: "Trust layer for agent-to-agent commerce: mandates, payments, escrow, dispute resolution." +description: The trust layer for agent-to-agent commerce — natural-language mandates, delegated permissions, x402 payments, escrow, and dispute resolution as one open, catch-all skill. By the Internet Court Consortium (internetcourt.org). MIT licensed. +kind: plugin +topics: + - integrations +compat: v2 +tags: + - agent-payments + - x402 + - erc-7710 + - erc-8004 + - escrow + - genlayer + - dispute-resolution + - a2a + - agentic-commerce diff --git a/data/plugins/jes.yaml b/data/plugins/jes.yaml new file mode 100644 index 0000000..eeaffb9 --- /dev/null +++ b/data/plugins/jes.yaml @@ -0,0 +1,8 @@ +name: jes +repo: https://github.com/everafterlabs/jes +tagline: Prompt-injection and jailbreak guardrails for AI agents, powered by decision models like Jev. +description: OpenCode plugin from the open-source jes library. It checks the user prompt, each tool call before it runs and each tool result, sending every check to a decision model such as Jev, which outputs a classification, not text. Secrets and PII are redacted locally before any model sees them. The Jev checks call a hosted API and need a TYPESAFE_API_KEY. +kind: plugin +topics: + - security +compat: v1 diff --git a/data/plugins/keep-going.yaml b/data/plugins/keep-going.yaml new file mode 100644 index 0000000..ec8b2e6 --- /dev/null +++ b/data/plugins/keep-going.yaml @@ -0,0 +1,10 @@ +name: keep-going +repo: https://github.com/ferdousbhai/keep-going +tagline: Sends an idle session back to work when a reviewer model judges the request unfinished +description: When a session goes idle, a reviewer model reads the owner's request and the last assistant message and answers CONTINUE or STOP; on CONTINUE the plugin sends a short fixed nudge such as "Keep going." as the next message. It stops for work that is done, blocked, or waiting on the owner's consent or answer, caps continuations per turn, and fails open on any error. Install with `npx github:ferdousbhai/keep-going --opencode`. +kind: plugin +topics: + - workflow +compat: v1 +scope: + - global diff --git a/data/plugins/kibi-opencode.yaml b/data/plugins/kibi-opencode.yaml index ada0758..47dabf7 100644 --- a/data/plugins/kibi-opencode.yaml +++ b/data/plugins/kibi-opencode.yaml @@ -1,10 +1,13 @@ name: kibi-opencode repo: https://github.com/Looted/kibi -tagline: Repo-local, branch-scoped knowledge and traceability for OpenCode -description: | - Plugin-first entry point into the Kibi stack for OpenCode users. It adds context-aware - guidance, routes durable code comments toward Kibi artifacts, runs non-blocking background - sync and targeted validation checks, and helps keep repo knowledge branch-local and queryable. +npm: kibi-opencode +tagline: OpenCode guidance for keeping requirements linked to code and tests +description: Kibi connects project requirements to code and tests. This optional OpenCode plugin gives agents relevant guidance and runs background sync and checks. +kind: plugin +topics: + - code-quality + - workflow +compat: v1 scope: - project tags: @@ -14,15 +17,27 @@ tags: - traceability installation: | ## Install - Add the plugin to your project `opencode.json`: + Install Kibi's core tools in your project, then initialize it: + + ```sh + npm install --save-dev kibi-core kibi-cli kibi-mcp + npm exec -- kibi init + ``` + + Add the MCP server and optional plugin to your project `opencode.json`: ```json { "$schema": "https://opencode.ai/config.json", + "mcp": { + "kibi": { + "type": "local", + "enabled": true, + "command": ["npx", "--no-install", "kibi-mcp"] + } + }, "plugin": ["kibi-opencode"] } ``` - OpenCode installs npm plugins declared in `plugin` automatically at startup. - - After startup, run `/init-kibi` in the repository to bootstrap the Kibi knowledge base. + After startup, run `/kibi-bootstrap` to plan and review the knowledge base for an existing project. diff --git a/data/plugins/kilo-auth.yaml b/data/plugins/kilo-auth.yaml index c4e1872..dd54849 100644 --- a/data/plugins/kilo-auth.yaml +++ b/data/plugins/kilo-auth.yaml @@ -2,3 +2,7 @@ name: Kilo Gateway Auth repo: https://github.com/JungHoonGhae/opencode-kilo-auth tagline: Kilo Gateway provider description: Adds Kilo Gateway provider support to OpenCode. +kind: plugin +topics: + - providers +compat: v1 diff --git a/data/plugins/laya-drift.yaml b/data/plugins/laya-drift.yaml new file mode 100644 index 0000000..ac946c0 --- /dev/null +++ b/data/plugins/laya-drift.yaml @@ -0,0 +1,9 @@ +name: Laya Drift +repo: https://github.com/pythongiant/laya-drift +tagline: Semantic drift monitoring for long-running OpenCode agent sessions. +description: Laya Drift monitors whether an OpenCode agent is staying aligned with its original plan over long-running sessions. It uses the Laya decision model to embed session state, compares the current semantic state against a calibrated baseline with Jensen-Shannon divergence, and surfaces a live drift score in the OpenCode UI. When drift gets high, it can inject the score into the system prompt so the agent can self-correct. Sessions can also be recalibrated to establish a new baseline after an intentional change in direction. +kind: plugin +topics: + - sessions + - observability +compat: v1 diff --git a/data/plugins/lazy-clean.yaml b/data/plugins/lazy-clean.yaml new file mode 100644 index 0000000..78c3159 --- /dev/null +++ b/data/plugins/lazy-clean.yaml @@ -0,0 +1,15 @@ +name: lazy-clean +repo: https://github.com/JustasMonkev/lazy-clean +tagline: Minimal-code guidance, review commands, and a dependency-free TS/JS slop checker +description: Injects configurable minimal-code guidance into OpenCode each turn and adds slash commands for code review, audits, and test review. Includes a local, dependency-free TypeScript/JavaScript heuristic checker, run manually in OpenCode. Install from the full checkout to keep the shared hooks and skills directories alongside the plugin. +kind: plugin +topics: + - code-quality + - ui +compat: v1 +scope: + - project +tags: + - code-review + - code-quality + - skills diff --git a/data/plugins/lemma.yaml b/data/plugins/lemma.yaml index 8d2720c..669b2ac 100644 --- a/data/plugins/lemma.yaml +++ b/data/plugins/lemma.yaml @@ -1,13 +1,13 @@ name: Lemma repo: https://github.com/xenitV1/lemma tagline: Persistent memory layer for LLMs via MCP - local, zero-dependency, works on all clients -description: > - Biological memory model for AI coding agents. Features confidence decay/boost, - Fuse.js fuzzy dedup, guide system with usage tracking, cross-references, - cumulative backup, virtual session tracking, and universal memory injection - via tool descriptions (works on Claude Desktop, Cursor, VS Code, Gemini CLI, - opencode, and any MCP client). No API keys, no cloud, fully local JSONL storage. - 20 MCP tools, 110 tests, MIT licensed. +description: Biological memory model for AI coding agents. Features confidence decay/boost, Fuse.js fuzzy dedup, guide system with usage tracking, cross-references, cumulative backup, virtual session tracking, and universal memory injection via tool descriptions (works on Claude Desktop, Cursor, VS Code, Gemini CLI, opencode, and any MCP client). No API keys, no cloud, fully local JSONL storage. 20 MCP tools, 110 tests, MIT licensed. +kind: plugin +also: + - mcp-server +topics: + - memory +compat: unknown scope: - global tags: diff --git a/data/plugins/liter-llm.yaml b/data/plugins/liter-llm.yaml index a88176d..bf8e448 100644 --- a/data/plugins/liter-llm.yaml +++ b/data/plugins/liter-llm.yaml @@ -1,7 +1,13 @@ name: liter-llm -repo: https://github.com/xberg-io/plugins +repo: https://github.com/xberg-io/liter-llm +npm: "@xberg-io/opencode-liter-llm" +homepage: https://www.npmjs.com/package/@xberg-io/opencode-liter-llm tagline: Universal LLM API client for 143 providers description: OpenCode plugin exposing liter-llm tools for chat, streaming, embeddings, and an OpenAI-compatible proxy across 143 providers. +kind: plugin +topics: + - providers +compat: v2 scope: - global - project @@ -10,7 +16,6 @@ tags: - openai - proxy - cli -homepage: https://www.npmjs.com/package/@xberg-io/opencode-liter-llm installation: | Add the package to `opencode.json`: diff --git a/data/plugins/littlepowers.yaml b/data/plugins/littlepowers.yaml new file mode 100644 index 0000000..88c4828 --- /dev/null +++ b/data/plugins/littlepowers.yaml @@ -0,0 +1,9 @@ +name: Littlepowers +repo: https://github.com/clsaa/littlepowers +tagline: Proportional planning, recovery, and phase review gates for consequential work +description: A proportional planning, recovery, and engineering-discipline protocol. Scales planning depth to risk (direct, compact shape, or full brainstorm → spec → design → plan), pauses for review at each phase gate, recovers the last checkpoint after interruptions, and mirrors task checklists to OpenCode's native todo surface. Registers its skills directory through the config hook and injects read-only recovery context through the message-transform hook; the same implementation also ships for Codex, Claude Code, and Qoder. +kind: plugin +topics: + - workflow + - code-quality +compat: v1 diff --git a/data/plugins/llm-proxy.yaml b/data/plugins/llm-proxy.yaml new file mode 100644 index 0000000..d38a817 --- /dev/null +++ b/data/plugins/llm-proxy.yaml @@ -0,0 +1,33 @@ +name: opencode-llm-proxy +repo: https://github.com/KochC/opencode-llm-proxy +npm: opencode-llm-proxy +homepage: https://www.npmjs.com/package/opencode-llm-proxy +tagline: OpenCode-backed API gateway with tool calling +description: Local OpenCode plugin that exposes OpenAI Chat Completions, OpenAI Responses, Anthropic Messages, and Gemini-compatible endpoints for any model configured in OpenCode. Supports streaming, model listing, and real tool/function calling including parallel tool calls, so tools like n8n, Open WebUI, LangChain, Continue, Zed, and coding agents can reuse the same OpenCode model setup. +kind: plugin +topics: + - providers +compat: v1 +scope: + - global + - project +tags: + - openai + - anthropic + - gemini + - responses-api + - llm-gateway + - tool-calling + - n8n + - open-webui + - langchain +installation: | + Add the package to `opencode.json`: + + ```json + { + "plugin": ["opencode-llm-proxy"] + } + ``` + + The proxy starts automatically on `http://127.0.0.1:4010`. diff --git a/data/plugins/lmstudio-warm.yaml b/data/plugins/lmstudio-warm.yaml new file mode 100644 index 0000000..293d47d --- /dev/null +++ b/data/plugins/lmstudio-warm.yaml @@ -0,0 +1,8 @@ +name: LM Studio Warm +repo: https://github.com/diegomarino/lm-studio-warm +tagline: Ensures your LM Studio model is loaded before every request +description: Guarantees the target LM Studio model is loaded and addressable before any request leaves opencode, healing cold starts, "no model loaded" errors, and mid-session idle-TTL evictions. +kind: plugin +topics: + - providers +compat: v1 diff --git a/data/plugins/lore.yaml b/data/plugins/lore.yaml new file mode 100644 index 0000000..30145d3 --- /dev/null +++ b/data/plugins/lore.yaml @@ -0,0 +1,10 @@ +name: Lore +repo: https://github.com/FFatTiger/lore +homepage: https://loremem.com/documents/agents/opencode +tagline: Long-term memory for OpenCode with boot baseline and per-prompt recall +description: Native plugin that connects OpenCode to a Lore memory server. A fixed boot baseline loads identity, workflow and preference memories into the system context at session start, recall surfaces relevant memories before each prompt, and durable facts are written back through guarded lore_* tools to a URI-addressed memory graph shared with Claude Code, Codex and other runtimes. Self-hosted with Docker or use the managed Loremem service. +kind: plugin +topics: + - memory + - prompting +compat: v1 diff --git a/data/plugins/magic-context.yaml b/data/plugins/magic-context.yaml index 3731f8f..d92c0ab 100644 --- a/data/plugins/magic-context.yaml +++ b/data/plugins/magic-context.yaml @@ -1,4 +1,8 @@ name: Magic Context -repo: https://github.com/cortexkit/opencode-magic-context +repo: https://github.com/cortexkit/magic-context tagline: Lossless context management with background compression description: Cache-aware context management that keeps long sessions productive. Background historian compresses old conversation into structured compartments while you keep working. Includes cross-session project memory, unified search across history/memories/facts, overnight dreamer for memory maintenance, and prompt-cache-safe deferred operations. +kind: plugin +topics: + - context +compat: v2 diff --git a/data/plugins/managed-skills.yaml b/data/plugins/managed-skills.yaml index 0bf8a27..e716183 100644 --- a/data/plugins/managed-skills.yaml +++ b/data/plugins/managed-skills.yaml @@ -2,3 +2,8 @@ name: Manage Skills repo: https://github.com/Randroids-Dojo/ManageSkills tagline: Wizard-driven skills management for OpenCode. description: Modal-based skill install, remove, list, and update workflow that avoids ANSI prompts while wrapping the skills CLI inside OpenCode. +kind: plugin +topics: + - prompting + - workflow +compat: v1 diff --git a/data/plugins/marginal.yaml b/data/plugins/marginal.yaml new file mode 100644 index 0000000..8972ba7 --- /dev/null +++ b/data/plugins/marginal.yaml @@ -0,0 +1,8 @@ +name: MARGINAL +repo: https://github.com/SignalLayerLabs/Marginal +tagline: Runtime governance for OpenCode that detects no-progress repetition and records local evidence. +description: MARGINAL is a local-first runtime governor for AI coding agents with an OpenCode observe-only integration. It observes tool activity, detects proven no-progress repetition, and records decision evidence without blocking OpenCode actions. +kind: plugin +topics: + - observability +compat: v1 diff --git a/data/plugins/mem0.yaml b/data/plugins/mem0.yaml new file mode 100644 index 0000000..24401e4 --- /dev/null +++ b/data/plugins/mem0.yaml @@ -0,0 +1,9 @@ +name: Mem0 OpenCode Plugin +repo: https://github.com/mem0ai/mem0 +tagline: Persistent memory plugin so your agent remembers across sessions +description: OpenCode plugin that gives your agent persistent memory powered by Mem0. Includes 9 MCP memory tools, 16 slash commands, and lifecycle hooks that auto-capture decisions, search prior context at session start, and pre-fetch error memories on failures. Install with `opencode plugin @mem0/opencode-plugin`. +kind: plugin +topics: + - memory + - sessions +compat: v1 diff --git a/data/plugins/micode.yaml b/data/plugins/micode.yaml index 6d3b1a5..5db5ea7 100644 --- a/data/plugins/micode.yaml +++ b/data/plugins/micode.yaml @@ -2,3 +2,7 @@ name: Micode repo: https://github.com/vtemian/micode tagline: Brainstorm-Plan-Implement workflow description: Structured workflow with session continuity, subagent orchestration, git worktree isolation, and AST-aware tools. +kind: plugin +topics: + - workflow +compat: v1 diff --git a/data/plugins/model-announcer.yaml b/data/plugins/model-announcer.yaml index eaf9302..9801943 100644 --- a/data/plugins/model-announcer.yaml +++ b/data/plugins/model-announcer.yaml @@ -2,3 +2,7 @@ name: Model Announcer repo: https://github.com/ramarivera/opencode-model-announcer tagline: Model self-awareness description: Automatically injects the current model name into the chat context so the LLM is self-aware. +kind: plugin +topics: + - prompting +compat: v1 diff --git a/data/plugins/modellix.yaml b/data/plugins/modellix.yaml new file mode 100644 index 0000000..b2b19a0 --- /dev/null +++ b/data/plugins/modellix.yaml @@ -0,0 +1,8 @@ +name: Modellix +repo: https://github.com/Modellix/modellix-plugin +tagline: Unified API for AI image and video generation +description: OpenCode-compatible plugin/skill for async image and video generation via Modellix CLI (model run --wait, task download) with default T2I/T2V/I2I/I2V/V2V/TTS/STT/STS models. +kind: plugin +topics: + - media +compat: v2 diff --git a/data/plugins/morph-fast-apply.yaml b/data/plugins/morph-fast-apply.yaml index 935ca96..2349f6b 100644 --- a/data/plugins/morph-fast-apply.yaml +++ b/data/plugins/morph-fast-apply.yaml @@ -2,3 +2,7 @@ name: Morph Fast Apply repo: https://github.com/JRedeker/opencode-morph-fast-apply tagline: 10,500+ tokens/sec code editing description: Integrates Morph's Fast Apply API for faster code editing with lazy edit markers and unified diff output. +kind: plugin +topics: + - code-intel +compat: v2 diff --git a/data/plugins/mrscraper.yaml b/data/plugins/mrscraper.yaml new file mode 100644 index 0000000..d1e3d65 --- /dev/null +++ b/data/plugins/mrscraper.yaml @@ -0,0 +1,32 @@ +name: MrScraper +repo: https://github.com/mrscraper-com/mrscraper-opencode-plugin +npm: "@mrscraper/opencode" +homepage: https://docs.mrscraper.com/docs/getting-started/mcp-server +tagline: Web pages as HTML, Markdown, or screenshots, plus Google search, through the hosted MrScraper MCP server +description: OpenCode plugin that registers the hosted MrScraper MCP server (https://mcp.mrscraper.com/mcp, OAuth 2.1) and three on-demand skills. Its tools retrieve known pages as HTML, Markdown, or screenshots (scraperAPI), search Google (webSearch), and report account usage (status). The skills follow a retrieve-first workflow that preserves raw page content and derives structured output locally. Works in OpenCode 2 and OpenCode 1. A MrScraper account is required. +kind: plugin +also: + - mcp-server +topics: + - web +compat: v2 +scope: + - global + - project +tags: + - mcp + - web-scraping + - screenshots + - google-search + - serp +installation: | + ```bash + # OpenCode 2 + opencode plugin add @mrscraper/opencode + # OpenCode 1 + opencode plugin @mrscraper/opencode --global + + opencode mcp auth mrscraper + ``` + + `opencode mcp list` shows `mrscraper` as connected after sign-in. diff --git a/data/plugins/muse-auth.yaml b/data/plugins/muse-auth.yaml new file mode 100644 index 0000000..784f4c7 --- /dev/null +++ b/data/plugins/muse-auth.yaml @@ -0,0 +1,8 @@ +name: Muse Auth +repo: https://github.com/TheStreamCode/opencode-muse-auth +tagline: Muse Spark billed to subscription +description: Use Muse Spark in opencode billed to the Muse Code monthly subscription via Meta device login instead of API billing. +kind: plugin +topics: + - providers +compat: v2 diff --git a/data/plugins/neuralyzer.yaml b/data/plugins/neuralyzer.yaml new file mode 100644 index 0000000..8af0e24 --- /dev/null +++ b/data/plugins/neuralyzer.yaml @@ -0,0 +1,8 @@ +name: Neuralyzer +repo: https://github.com/gintasz/neuralyzer +tagline: Easier Ralph loop inside harness +description: Allow agent to wipe its own session context and re-run the first message. This allows easier and more ergonomic Ralph loop engineering. +kind: plugin +topics: + - workflow +compat: v1 diff --git a/data/plugins/oc-mnemoria.yaml b/data/plugins/oc-mnemoria.yaml index 8f56df8..109e4b6 100644 --- a/data/plugins/oc-mnemoria.yaml +++ b/data/plugins/oc-mnemoria.yaml @@ -2,3 +2,8 @@ name: oc-mnemoria repo: https://github.com/one-bit/oc-mnemoria tagline: Persistent shared memory (hive mind) for OpenCode agents across sessions description: Gives all OpenCode agents a shared persistent memory store where every agent can read and write. Each entry is tagged with the creating agent (plan, build, ask, review) so no context is lost between roles. Powered by the mnemoria Rust engine with hybrid BM25 + semantic search, CRC32 checksum chains, and an append-only binary format. Includes 7 tools and /mn-* slash commands. +kind: plugin +topics: + - memory + - sessions +compat: v1 diff --git a/data/plugins/oh-my-agentmemory.yaml b/data/plugins/oh-my-agentmemory.yaml new file mode 100644 index 0000000..8e8cd38 --- /dev/null +++ b/data/plugins/oh-my-agentmemory.yaml @@ -0,0 +1,16 @@ +name: oh-my-agentmemory +repo: https://github.com/dev-hann/oh-my-agentmemory +tagline: Forces agents to actually write to agentmemory, not just read from it +description: Companion plugin to agentmemory-capture. Re-injects a memory policy directive into the system prompt every turn so the agent actually calls memory_save, bootstraps empty pinned slots on session start, catches bilingual intent keywords (EN/KR), auto-saves lessons from error-signal file edits, and suggests crystallizing finished work. Installs from npm with one line in opencode.json. +kind: plugin +topics: + - memory +compat: v2 +scope: + - global +tags: + - memory + - agentmemory + - persistence +min_version: 1.14.0 +installation: Add `"oh-my-agentmemory"` to the `plugin` array in `opencode.json` and restart opencode. diff --git a/data/plugins/oh-my-cassette.yaml b/data/plugins/oh-my-cassette.yaml new file mode 100644 index 0000000..8c7c59b --- /dev/null +++ b/data/plugins/oh-my-cassette.yaml @@ -0,0 +1,25 @@ +name: Oh My Cassette +repo: https://github.com/Cassette-Editor/oh-my-cassette +homepage: https://trycassette.online +tagline: Chat your raw clips into a finished cut +description: "Adds a local stdio MCP server that turns a chat message into an edited video: beat-synced cuts, auto-matched background music, subtitles, transitions, and picture-in-picture. Ingest local clips, then drive a persistent multi-turn editing thread — every turn returns a timeline delta and a contact-sheet preview, so an edit can be reviewed before anything renders. Editing and rendering run on the hosted Cassette service, which requires an account; the plugin, skills, and MCP server are MIT licensed." +kind: plugin +topics: + - media +compat: v2 +scope: + - global +tags: + - mcp + - video + - video-editing + - media +installation: | + ```bash + curl -fsSL https://raw.githubusercontent.com/Cassette-Editor/oh-my-cassette/release/scripts/install_opencode.py | python3 - + ``` + + Writes the `cassette` MCP server into `~/.config/opencode/opencode.json`, installs the + host-neutral skills into `~/.config/opencode/skills/`, and adds `/cassette-model` to + `~/.config/opencode/commands/`. Re-run the same command to update. Requires Python + 3.11–3.13 on the machine and a Cassette account. diff --git a/data/plugins/oh-my-kiro.yaml b/data/plugins/oh-my-kiro.yaml new file mode 100644 index 0000000..f81a26a --- /dev/null +++ b/data/plugins/oh-my-kiro.yaml @@ -0,0 +1,9 @@ +name: Oh My Kiro +repo: https://github.com/1nhann/oh-my-kiro +tagline: AWS Kiro-inspired multi-agent SDD coding agent harness +description: A spec-driven, multi-agent coding plugin for OpenCode inspired by AWS Kiro. Features requirements-first workflow, spec task execution, context gathering, background tasks, and multimodal support. +kind: plugin +topics: + - orchestration + - workflow +compat: v2 diff --git a/data/plugins/oh-my-openagent.yaml b/data/plugins/oh-my-openagent.yaml new file mode 100644 index 0000000..76864ff --- /dev/null +++ b/data/plugins/oh-my-openagent.yaml @@ -0,0 +1,8 @@ +name: Oh My OpenAgent +repo: https://github.com/code-yeongyu/oh-my-openagent +tagline: Agents & Pre-built tools +description: Background agents, pre-built tools (LSP/AST/MCP), curated agents, and a Claude Code compatible layer. (formerly Oh My Opencode) +kind: plugin +topics: + - orchestration +compat: v1 diff --git a/data/plugins/oh-my-opencode-slim.yaml b/data/plugins/oh-my-opencode-slim.yaml index d2e508b..d3d8e3a 100644 --- a/data/plugins/oh-my-opencode-slim.yaml +++ b/data/plugins/oh-my-opencode-slim.yaml @@ -1,8 +1,13 @@ name: Oh My Opencode Slim repo: https://github.com/alvinunreal/oh-my-opencode-slim +homepage: https://ohmyopencodeslim.com tagline: Lightweight agent orchestration with reduced token usage description: Slimmed-down fork of oh-my-opencode focused on core agent orchestration. Features specialized sub-agents (Explorer, Oracle, Librarian, Designer, etc.), background task management, LSP/AST tools, tmux integration for live agent visibility, and MCP servers. Optimized to consume significantly fewer tokens. -homepage: https://ohmyopencodeslim.com +kind: plugin +topics: + - orchestration + - context +compat: v2 tags: - agents - orchestration diff --git a/data/plugins/oh-my-opencode.yaml b/data/plugins/oh-my-opencode.yaml deleted file mode 100644 index 7e080e7..0000000 --- a/data/plugins/oh-my-opencode.yaml +++ /dev/null @@ -1,4 +0,0 @@ -name: Oh My Opencode -repo: https://github.com/code-yeongyu/oh-my-opencode -tagline: Agents & Pre-built tools -description: Background agents, pre-built tools (LSP/AST/MCP), curated agents, and a Claude Code compatible layer. diff --git a/data/plugins/omniroute-auth.yaml b/data/plugins/omniroute-auth.yaml index b55b65f..2735b51 100644 --- a/data/plugins/omniroute-auth.yaml +++ b/data/plugins/omniroute-auth.yaml @@ -2,3 +2,7 @@ name: Omniroute Auth repo: https://github.com/Alph4d0g/opencode-omniroute-auth tagline: Omniroute authentication provider description: Connect and automatically fetch models from your Omniroute instance +kind: plugin +topics: + - providers +compat: v1 diff --git a/data/plugins/open-conclave.yaml b/data/plugins/open-conclave.yaml index 04e913f..97bbe38 100644 --- a/data/plugins/open-conclave.yaml +++ b/data/plugins/open-conclave.yaml @@ -2,3 +2,7 @@ name: Open Conclave repo: https://github.com/martinzokov/open-conclave tagline: Multi-agent debates, moderated by a captain agent until they reach consensus description: In the style of Grok 4.20, multiple agents are dispatched to answer the same query. Each one has a different system prompt (logical, creative, research-focused) and have to reach a consensus for the final output. The user can specify which provider/model they want to use and override the system prompt of each agent via config. +kind: plugin +topics: + - orchestration +compat: v1 diff --git a/data/plugins/open-dynamic-workflows.yaml b/data/plugins/open-dynamic-workflows.yaml index 5dba057..ccc3c04 100644 --- a/data/plugins/open-dynamic-workflows.yaml +++ b/data/plugins/open-dynamic-workflows.yaml @@ -1,4 +1,10 @@ name: Open Dynamic Workflows repo: https://github.com/Suraj1235/open-dynamic-workflows tagline: Dynamic multi-agent workflows for OpenCode — plan, orchestrate, and verify with the script as the orchestrator -description: An MIT-licensed engine bringing Claude-Code-style dynamic workflows and ultracode to OpenCode. A local daemon runs a generated orchestration script with concurrent agents, adversarial verification, and crash-resume; the OpenCode plugin adds workflow/ultracode triggers and a planning UI. Bring your own model — Anthropic, any OpenAI-compatible endpoint, or local Ollama. \ No newline at end of file +description: An MIT-licensed engine bringing Claude-Code-style dynamic workflows and ultracode to OpenCode. A local daemon runs a generated orchestration script with concurrent agents, adversarial verification, and crash-resume; the OpenCode plugin adds workflow/ultracode triggers and a planning UI. Bring your own model — Anthropic, any OpenAI-compatible endpoint, or local Ollama. +kind: plugin +topics: + - orchestration + - workflow + - code-quality +compat: v1 diff --git a/data/plugins/open-plan-annotator.yaml b/data/plugins/open-plan-annotator.yaml index 6517476..b37a643 100644 --- a/data/plugins/open-plan-annotator.yaml +++ b/data/plugins/open-plan-annotator.yaml @@ -2,4 +2,8 @@ name: open-plan-annotator repo: https://github.com/ndom91/open-plan-annotator tagline: Annotate LLM plans like a Google Doc! description: A fully local agentic coding plugin that intercepts plan mode and opens an annotation UI in your browser. Select text to strikethrough, replace, insert, or comment — then approve the plan or request changes - +kind: plugin +topics: + - workflow + - ui +compat: v2 diff --git a/data/plugins/openai-codex-auth.yaml b/data/plugins/openai-codex-auth.yaml index 8ed3213..04dcfb8 100644 --- a/data/plugins/openai-codex-auth.yaml +++ b/data/plugins/openai-codex-auth.yaml @@ -2,3 +2,7 @@ name: OpenAI Codex Auth repo: https://github.com/numman-ali/opencode-openai-codex-auth tagline: ChatGPT Plus/Pro OAuth description: This plugin enables opencode to use OpenAI's Codex backend via ChatGPT Plus/Pro OAuth authentication. +kind: plugin +topics: + - providers +compat: v1 diff --git a/data/plugins/opencode-adaptive-thinking.yaml b/data/plugins/opencode-adaptive-thinking.yaml index 0e929b9..f9a3e52 100644 --- a/data/plugins/opencode-adaptive-thinking.yaml +++ b/data/plugins/opencode-adaptive-thinking.yaml @@ -2,3 +2,7 @@ name: OpenCode Adaptive Thinking repo: https://github.com/ian-pascoe/opencode-adaptive-thinking tagline: Adaptive reasoning-effort control description: OpenCode plugin that lets agents actively adjust model reasoning effort during a session, with configurable system guidance and a tool for switching between valid reasoning-effort variants. +kind: plugin +topics: + - providers +compat: v1 diff --git a/data/plugins/opencode-agent-identity.yaml b/data/plugins/opencode-agent-identity.yaml index 6384ee0..4130da2 100644 --- a/data/plugins/opencode-agent-identity.yaml +++ b/data/plugins/opencode-agent-identity.yaml @@ -2,3 +2,7 @@ name: Agent Identity repo: https://github.com/gotgenes/opencode-agent-identity tagline: Agent self-identity and per-message attribution for multi-agent sessions description: Two plugins that improve agent identity awareness. AgentSelfIdentityPlugin injects a one-liner into the system prompt so the model knows which agent it's operating as. AgentAttributionToolPlugin exposes a tool for querying per-message agent attribution via the SDK, useful for agents that review multi-agent sessions. +kind: plugin +topics: + - orchestration +compat: v1 diff --git a/data/plugins/opencode-agent-loop.yaml b/data/plugins/opencode-agent-loop.yaml new file mode 100644 index 0000000..5333aa1 --- /dev/null +++ b/data/plugins/opencode-agent-loop.yaml @@ -0,0 +1,8 @@ +name: Agent Loop +repo: https://github.com/dwrdx/opencode-agent-loop +tagline: Goal-oriented agent loop that nudges agents toward objectives +description: Iteratively drives agents toward configurable objectives with turn/time budgets, marker/regex-based termination conditions, idle detection, and a /loop slash command for manual control. +kind: plugin +topics: + - workflow +compat: v2 diff --git a/data/plugins/opencode-agent-tmux.yaml b/data/plugins/opencode-agent-tmux.yaml index 891a6cd..ca14c76 100644 --- a/data/plugins/opencode-agent-tmux.yaml +++ b/data/plugins/opencode-agent-tmux.yaml @@ -1,4 +1,9 @@ name: OpenCode Agent Tmux -repo: https://github.com/AnganSamadder/opencode-agent-tmux +repo: https://github.com/AnganSamadder/opentmux tagline: Real-time tmux panes for OpenCode agents with auto-launch, streaming, and cleanup. description: Smart tmux integration for OpenCode that auto-spawns panes to stream agent output, supports flexible layouts and multi-port setups, and cleans up when sessions finish. +kind: plugin +topics: + - environment + - orchestration +compat: unknown diff --git a/data/plugins/opencode-agents-sidebar.yaml b/data/plugins/opencode-agents-sidebar.yaml index 05b9912..5e3808f 100644 --- a/data/plugins/opencode-agents-sidebar.yaml +++ b/data/plugins/opencode-agents-sidebar.yaml @@ -2,3 +2,7 @@ name: Opencode Agents Sidebar repo: https://github.com/Mark1708/opencode-agents-sidebar tagline: Browse configured OhMyOpenAgent agents in the TUI description: OpenCode sidebar plugin that displays configured OhMyOpenAgent agents with lifecycle-based categories, collapsible sections, descriptions, and model information. +kind: plugin +topics: + - ui +compat: v1 diff --git a/data/plugins/opencode-arise.yaml b/data/plugins/opencode-arise.yaml index c6ff26f..d5d014b 100644 --- a/data/plugins/opencode-arise.yaml +++ b/data/plugins/opencode-arise.yaml @@ -2,3 +2,7 @@ name: "@bluelovers/opencode-arise" repo: https://github.com/bluelovers/opencode-arise tagline: 「⚔️ ARISE!」 A Solo Leveling themed orchestrator harness for OpenCode description: A lightweight, token-efficient orchestrator layer. Enables parallel background task execution in OpenCode. Launch AI agents to work simultaneously on exploration and research while continuing with other tasks. Allows specifying custom models for each_agent via configuration. +kind: plugin +topics: + - orchestration +compat: v1 diff --git a/data/plugins/opencode-ascii.yaml b/data/plugins/opencode-ascii.yaml index 38143db..fd356ca 100644 --- a/data/plugins/opencode-ascii.yaml +++ b/data/plugins/opencode-ascii.yaml @@ -2,3 +2,7 @@ name: opencode-ascii repo: https://github.com/d3vv3/opencode-ascii tagline: Strip unicode characters from output and replace them by their ASCII equivalents description: Substitute unicode characters for ASCII. Em-dash (—) and en-dash (–) for hyphens (-); right arrow (→) for (->) and so on. +kind: plugin +topics: + - ui +compat: v1 diff --git a/data/plugins/opencode-ask.yaml b/data/plugins/opencode-ask.yaml new file mode 100644 index 0000000..8b9f073 --- /dev/null +++ b/data/plugins/opencode-ask.yaml @@ -0,0 +1,9 @@ +name: opencode-ask +repo: https://github.com/dhkimxx/opencode-ask +tagline: Multi-turn /btw-style side chat that never adds to your session +description: Ask follow-up side questions about the current session in a full-screen view. Switch to the main conversation and back with shift+arrows, and close the side chat to forget it. Built for OpenCode 2. +kind: plugin +topics: + - sessions +compat: v2 +min_version: 2.0.27 diff --git a/data/plugins/opencode-autocompact.yaml b/data/plugins/opencode-autocompact.yaml new file mode 100644 index 0000000..bbe3789 --- /dev/null +++ b/data/plugins/opencode-autocompact.yaml @@ -0,0 +1,46 @@ +name: OpenCode Autocompact +repo: https://github.com/N0K0/opencode-autocompact +npm: "@hacky.software/opencode-autocompact" +tagline: Per-session autocompact — /autocompact 500k compacts a session and its children early +description: Claude Code's autocompact, with a knob. Compacts a session before the model's real context limit, at a token count you choose per session. OpenCode's built-in auto-compaction is configured globally and only relative to the model limit, so on a 256K or 1M context model it kicks in very late; this adds an earlier, deliberate ceiling for one session and its children, useful for cheaper requests, more headroom for large tool results, or a shorter tail for the summarizer. Thresholds are inherited by subagents by walking the parentID chain, `/autocompact off` reverts to normal behaviour, and with no threshold set the plugin has zero footprint. When a threshold applies, a chip joins the prompt footer and a side panel shows the numbers. Tested against 2.0.24. +kind: plugin +topics: + - context +compat: v2 +scope: + - global + - project +tags: + - context + - compaction + - tokens + - tui +min_version: 2.0.0 +installation: | + ## Install + + ```sh + opencode plugin add @hacky.software/opencode-autocompact + ``` + + Or list it in `opencode.json`: + + ```json + { + "$schema": "https://opencode.ai/config.json", + "plugins": ["@hacky.software/opencode-autocompact"] + } + ``` + + ## Usage + + ``` + /autocompact 500k # compact this session (and its children) at 500k tokens + /autocompact 500000 # same, plain count + /autocompact 1m # suffix form + /autocompact # report the effective threshold and the model's limit + /autocompact off # revert this session (and descendants) to normal auto-compaction + ``` + + No configuration is required. The plugin does nothing until a threshold is set for a + session or one of its ancestors. diff --git a/data/plugins/opencode-autorecord.yaml b/data/plugins/opencode-autorecord.yaml new file mode 100644 index 0000000..ed6e0ab --- /dev/null +++ b/data/plugins/opencode-autorecord.yaml @@ -0,0 +1,8 @@ +name: AutoRecord +repo: https://github.com/kevinsoul/opencode-autorecord +tagline: Automatic session recording +description: Automatically saves all OpenCode session records to Markdown files with centralized storage in ~/opencode-autorecord, plus generated HTML views (overview index + per-project pages) for browsing conversations. +kind: plugin +topics: + - sessions +compat: v2 diff --git a/data/plugins/opencode-awake.yaml b/data/plugins/opencode-awake.yaml new file mode 100644 index 0000000..f407ba7 --- /dev/null +++ b/data/plugins/opencode-awake.yaml @@ -0,0 +1,32 @@ +name: Awake +repo: https://github.com/vvo/opencode-plugins +path: packages/awake +npm: opencode-awake +homepage: https://www.npmjs.com/package/opencode-awake +tagline: Keeps your computer awake while a session works, even with the lid closed +description: OpenCode plugin that keeps the computer from sleeping while a session is working, including lid-close sleep on MacBooks. Other sleep plugins only block idle sleep with caffeinate; this one also blocks lid sleep via pmset on macOS and systemd-inhibit on Linux, and releases it as soon as every session is idle. +kind: plugin +topics: + - environment +compat: v2 +scope: + - global +tags: + - sleep + - caffeinate + - macos + - linux +installation: | + OpenCode 2: + + ```sh + opencode plugin add opencode-awake + ``` + + OpenCode 1, in `opencode.json`: + + ```json + { "plugin": ["opencode-awake"] } + ``` + + On macOS, allowing `pmset` without a password is needed for the closed-lid feature. diff --git a/data/plugins/opencode-background-tasks.yaml b/data/plugins/opencode-background-tasks.yaml new file mode 100644 index 0000000..7dc6191 --- /dev/null +++ b/data/plugins/opencode-background-tasks.yaml @@ -0,0 +1,9 @@ +name: opencode-background-tasks +repo: https://github.com/PrismKitty/opencode-background-tasks +tagline: A sidebar list of the background shells and subagents still running in an OpenCode v2 session +description: Adds a Background list to the OpenCode v2 session sidebar with every shell and subagent sent to the background, a live timer on each, and a done or failed mark when it ends. +kind: plugin +topics: + - orchestration + - ui +compat: v2 diff --git a/data/plugins/opencode-bmad-workflow.yaml b/data/plugins/opencode-bmad-workflow.yaml index 7378544..2f9d1fd 100644 --- a/data/plugins/opencode-bmad-workflow.yaml +++ b/data/plugins/opencode-bmad-workflow.yaml @@ -2,3 +2,8 @@ name: opencode-bmad-workflow repo: https://github.com/Alex-stack-cell/opencode-bmad-workflow tagline: BMAD workflow plugin — automates epic, feature, sprint and code review workflows using specialized AI agents description: Brings the BMAD (Breakthrough Method of Agile AI-Driven Development) methodology to OpenCode. Provides specialized agents for product management, architecture, development, and QA roles. Automates epic planning, feature breakdown, sprint workflows, and code reviews through a structured multi-agent pipeline. +kind: plugin +topics: + - workflow + - orchestration +compat: v1 diff --git a/data/plugins/opencode-boffin.yaml b/data/plugins/opencode-boffin.yaml new file mode 100644 index 0000000..097e41b --- /dev/null +++ b/data/plugins/opencode-boffin.yaml @@ -0,0 +1,19 @@ +name: Boffin +repo: https://github.com/MicSm/boffin +homepage: https://github.com/MicSm/boffin#readme +tagline: Routed architectural guardrails for AI coding agents in OpenCode +description: "Staff-engineer layer for AI coding agents: routes per-edit architectural constraints and requires verification. Not another AGENTS.md." +kind: plugin +topics: + - code-quality +compat: v2 +scope: + - project +tags: + - opencode + - architecture + - guardrails + - code-review + - cplusplus + - python +installation: npx boffinit opencode diff --git a/data/plugins/opencode-cache-compact.yaml b/data/plugins/opencode-cache-compact.yaml new file mode 100644 index 0000000..b2f2f62 --- /dev/null +++ b/data/plugins/opencode-cache-compact.yaml @@ -0,0 +1,18 @@ +name: opencode-cache-compact +repo: https://github.com/lennartschoch/opencode-cache-compact +tagline: Cache-friendly compaction for locally hosted models +description: Replaces OpenCode's built-in compaction, which rebuilds the prompt from scratch (no system prompt, no tools, history re-serialized) and therefore cold-prefills the whole conversation. This plugin appends the summary turn instead — a cache hit — and then rewrites only the outgoing message list down to that summary, so a locally hosted model reuses its KV cache instead of re-reading everything. Aimed at llama.cpp / LM Studio / vLLM setups where prefilling a large context is the expensive part. +kind: plugin +topics: + - context +compat: v2 +scope: + - global + - project +tags: + - context + - compaction + - prompt-cache + - local-models + - llama.cpp +min_version: 1.17.9 diff --git a/data/plugins/opencode-caelestia-notify.yaml b/data/plugins/opencode-caelestia-notify.yaml new file mode 100644 index 0000000..c63b4de --- /dev/null +++ b/data/plugins/opencode-caelestia-notify.yaml @@ -0,0 +1,8 @@ +name: Opencode Caelestia Notify +repo: https://github.com/Shanu-Kumawat/opencode-caelestia-notify +tagline: Desktop notifications when opencode finishes or needs your attention +description: Sends a system notification when opencode finishes responding, hits an error, or waits for permission or input. Shows the session name so you know which task it is, and skips the done notification when your terminal is already focused. Built and tested on Caelestia shell, works on any Hyprland/Wayland desktop. Zero dependencies, single file. +kind: plugin +topics: + - notifications +compat: v1 diff --git a/data/plugins/opencode-canvas.yaml b/data/plugins/opencode-canvas.yaml index 7aff246..6642b07 100644 --- a/data/plugins/opencode-canvas.yaml +++ b/data/plugins/opencode-canvas.yaml @@ -1,4 +1,9 @@ name: Opencode Canvas repo: https://github.com/mailshieldai/opencode-canvas tagline: Interactive terminal canvases in tmux splits -description: Interactive terminal canvases (calendars, documents, flight booking) in tmux splits. Port of claude-canvas for OpenCode. \ No newline at end of file +description: Interactive terminal canvases (calendars, documents, flight booking) in tmux splits. Port of claude-canvas for OpenCode. +kind: plugin +topics: + - ui + - environment +compat: v1 diff --git a/data/plugins/opencode-ccs-sync.yaml b/data/plugins/opencode-ccs-sync.yaml index f4de627..866603c 100644 --- a/data/plugins/opencode-ccs-sync.yaml +++ b/data/plugins/opencode-ccs-sync.yaml @@ -2,3 +2,7 @@ name: Claude Code Switch (CCS) OpenCode Sync repo: https://github.com/JasonLandbridge/opencode-ccs-sync tagline: Claude Code Switch (CCS) to OpenCode sync description: An OpenCode plugin that reads your Claude Code Switch (CCS) configuration and automatically syncs the providers into your OpenCode config. +kind: plugin +topics: + - providers +compat: v1 diff --git a/data/plugins/opencode-chat-workflow-setup.yaml b/data/plugins/opencode-chat-workflow-setup.yaml new file mode 100644 index 0000000..f45fca8 --- /dev/null +++ b/data/plugins/opencode-chat-workflow-setup.yaml @@ -0,0 +1,8 @@ +name: OpenCode Chat Workflow Setup +repo: https://github.com/Zaradacht/opencode-chat-workflow-setup +tagline: Configure chat workflows and reusable templates before skills run +description: Adds /setup-chat-workflows, /start-session, and /workflow-template commands. Workflows collect context, scope, gates, review modes, and reusable template choices before handing off to skills or actions. +kind: plugin +topics: + - workflow +compat: v2 diff --git a/data/plugins/opencode-chromium-browser-plugin.yaml b/data/plugins/opencode-chromium-browser-plugin.yaml index 30d2940..c3ecd6a 100644 --- a/data/plugins/opencode-chromium-browser-plugin.yaml +++ b/data/plugins/opencode-chromium-browser-plugin.yaml @@ -1,7 +1,12 @@ name: OpenCode Chromium Browser Plugin -repo: https://github.com/DJOCKER-FACE/opencode-chromium-browser-plugin +repo: https://github.com/Quindart-com/opencode-chromium-browser-plugin +homepage: https://github.com/DJOCKER-FACE/opencode-chromium-browser-plugin tagline: Browser automation for Chromium browsers with a readable extension and native host description: OpenCode browser automation for Chromium-based browsers using a readable Manifest V3 extension, Node.js native messaging host, and OpenCode-native tools. Supports Chrome, Edge, Brave, Chromium, screenshots, CDP commands, DOM actions, downloads, console/network inspection, and controlled tab sessions. +kind: plugin +topics: + - web +compat: unknown scope: - project tags: @@ -10,4 +15,3 @@ tags: - automation - native-messaging - cdp -homepage: https://github.com/DJOCKER-FACE/opencode-chromium-browser-plugin diff --git a/data/plugins/opencode-clarify.yaml b/data/plugins/opencode-clarify.yaml new file mode 100644 index 0000000..dca5c2c --- /dev/null +++ b/data/plugins/opencode-clarify.yaml @@ -0,0 +1,8 @@ +name: OpenCode Clarify +repo: https://github.com/D-MSol4/opencode-clarify +tagline: Rewrite rough prompts into precise technical prompts +description: Rewrites rough, plain-language prompts into precise technical prompts with /clarify, /clarify:model, or a -clarify marker before you send them to the model. OpenCode 2 TUI plugin, ported from pi-clarify. +kind: plugin +topics: + - prompting +compat: v2 diff --git a/data/plugins/opencode-claude-memory.yaml b/data/plugins/opencode-claude-memory.yaml index b506021..5e81d24 100644 --- a/data/plugins/opencode-claude-memory.yaml +++ b/data/plugins/opencode-claude-memory.yaml @@ -2,3 +2,7 @@ name: OpenCode Claude Memory repo: https://github.com/kuitos/opencode-claude-memory tagline: Claude Code-compatible memory description: Share persistent Markdown memory between OpenCode and Claude Code using Claude Code-compatible paths and file formats. +kind: plugin +topics: + - memory +compat: v2 diff --git a/data/plugins/opencode-cmd-provider.yaml b/data/plugins/opencode-cmd-provider.yaml new file mode 100644 index 0000000..2464c9a --- /dev/null +++ b/data/plugins/opencode-cmd-provider.yaml @@ -0,0 +1,20 @@ +name: Opencode CMD Provider +repo: https://github.com/rashidrazak/opencode-cmd-provider +tagline: Use CommandCode plans (Go, GOAT, Pro, Max) as an OpenCode provider. +description: |- + OpenCode provider plugin for the CommandCode Provider API. Authenticate via + /connect browser flow or COMMANDCODE_API_KEY, auto-registers all CommandCode + models ([CMD] prefix) with offline snapshot, pricing display, and per-plan + deals/allowance intelligence in the sidebar and cmd_plan_summary tool. +kind: plugin +topics: + - providers +compat: v2 +scope: + - global + - project +tags: + - provider + - commandcode + - model-discovery + - auth diff --git a/data/plugins/opencode-cost-details.yaml b/data/plugins/opencode-cost-details.yaml new file mode 100644 index 0000000..ec0dd00 --- /dev/null +++ b/data/plugins/opencode-cost-details.yaml @@ -0,0 +1,33 @@ +name: Cost Details +repo: https://github.com/vvo/opencode-plugins +path: packages/cost-details +npm: opencode-cost-details +homepage: https://www.npmjs.com/package/opencode-cost-details +tagline: Shows current and previous turn cost in the sidebar Context section +description: OpenCode TUI plugin that shows how much the current and previous prompt turns cost, right in the sidebar Context section next to the token count. +kind: plugin +topics: + - cost + - ui +compat: v2 +scope: + - global +tags: + - cost + - tokens + - tui + - sidebar +installation: | + OpenCode 2, in `~/.config/opencode/cli.json`: + + ```json + { + "plugins": ["-opencode.sidebar.context", "opencode-cost-details"] + } + ``` + + OpenCode 1, in `~/.config/opencode/tui.json`: + + ```json + { "plugin": ["opencode-cost-details"] } + ``` diff --git a/data/plugins/opencode-craft.yaml b/data/plugins/opencode-craft.yaml new file mode 100644 index 0000000..8231f62 --- /dev/null +++ b/data/plugins/opencode-craft.yaml @@ -0,0 +1,29 @@ +name: opencode-craft +repo: https://github.com/pauloralves/opencode-craft +npm: opencode-craft +homepage: https://www.npmjs.com/package/opencode-craft +tagline: Senior pair programmer, craftsmanship coach, and knowledge ledger for OpenCode +description: Transforms OpenCode into a seasoned Principal Engineer / Technical Craft Lead who builds software at full velocity while coaching system architecture, trade-offs, and interview readiness. Includes auto-synced LEARNING_PATH.md and @expand / @interview-angle skills. +kind: plugin +topics: + - docs +compat: v1 +scope: + - global + - project +tags: + - pair-programming + - craftsmanship + - interview-prep + - learning-path + - memory +installation: | + Add to your `opencode.json` (or `~/.config/opencode/opencode.jsonc`): + + ```json + { + "plugin": [ + "opencode-craft" + ] + } + ``` diff --git a/data/plugins/opencode-crosstalk.yaml b/data/plugins/opencode-crosstalk.yaml new file mode 100644 index 0000000..9bf2eee --- /dev/null +++ b/data/plugins/opencode-crosstalk.yaml @@ -0,0 +1,110 @@ +name: OpenCode Crosstalk +repo: https://github.com/MrDoe/opencode-crosstalk +tagline: Peer discovery, messaging, and expiring file leases between concurrent OpenCode sessions +description: |- + Coordination for agents that share a workspace. Six tools let concurrent sessions + discover each other, talk to each other, and take exclusive expiring leases on the + files they are editing, so two agents never rewrite the same file at once. + + - `crosstalk_status` / `crosstalk_peers` — declare a role, goal, and working set, then list who is running, what they declared, and what they hold + - `crosstalk_send` / `crosstalk_inbox` — message a session, a role, or everyone; mail lands in the recipient's mailbox and is injected into its current turn when the session is live + - `crosstalk_claim` — atomic lease on files or named resources; a refusal names the holder and when the lease expires + - `crosstalk_wait` — block until a peer goes idle or a resource is released, instead of sleeping and re-checking + + Identity comes from the session rather than from tool input, so no session can + release another's lease or read another's mail. All six tools share one permission + action (`crosstalk`), so a project can allow or deny coordination with a single + rule. The core coordination logic (presence registry, mailboxes, claim table) is + host-free and unit tested — the plugin imports nothing from OpenCode outside its + single entry point. +kind: plugin +topics: + - orchestration +compat: v2 +scope: + - global + - project +tags: + - multi-agent + - coordination + - file-locking + - messaging + - agents +min_version: 2.0.0 +installation: | + ## Prerequisites + - OpenCode 2.0.0 or later + - Node.js 22.18+ (OpenCode runs the TypeScript source directly, there is no build step) + + ## Install + ```bash + git clone https://github.com/MrDoe/opencode-crosstalk + cd opencode-crosstalk && npm install + ``` + + ### Every project on this machine + ```bash + npm run setup # symlink this checkout into ~/.opencode/plugins/crosstalk + npm run uninstall # remove the link again + ``` + + The global `plugins/` directory is discovered automatically, so no config edit is + needed. Install into exactly one global root — linking both `~/.opencode/plugins/` + and `~/.config/opencode/plugins/` loads the plugin twice per location. Set + `CROSSTALK_PLUGINS_DIR` to target another directory. + + ### One project + Add to `opencode.jsonc`: + ```json + { + "$schema": "https://opencode.ai/config.json", + "plugins": ["../opencode-crosstalk"] + } + ``` + + Or symlink or copy the package into `.opencode/plugins/`, where it is discovered + with no configuration at all. + + ## Configuration + All options are optional and are set with the object form of `plugins`: + ```json + { + "plugins": [ + { + "package": "../opencode-crosstalk", + "options": { + "scope": "project", + "claimTtlMs": 300000, + "codemode": false + } + } + ] + } + ``` + + | Option | Default | Meaning | + | --- | --- | --- | + | `namespace` | `crosstalk` | Tool namespace; dots are rejected. | + | `permission` | `crosstalk` | Permission action for all six tools. | + | `codemode` | `false` | Expose the tools through Code Mode instead of directly. | + | `scope` | `project` | Peer visibility: `project`, `location`, or `server`. | + | `claimTtlMs` | `300000` | Default lease duration. | + | `maxWaitMs` | `120000` | Ceiling on any blocking call. | + | `announce` | `true` | Add the coordination briefing to the system prompt. | + + Bad values degrade to the default with a warning, so a typo never costs an agent + its tools mid-session. See the README for the full option table. + + ## Permissions + No rule is required to use the tools — OpenCode's base policy already allows the + `crosstalk` action. Add a rule to control it instead: + ```json + { + "permissions": [{ "action": "crosstalk", "resource": "*", "effect": "ask" }] + } + ``` + + ## Removal + 1. Run `npm run uninstall` in the checkout, or remove the symlinked directory + 2. Remove the `plugins` entry from `opencode.jsonc` if you added one + 3. `opencode service restart` if the plugin was already loaded in a running session diff --git a/data/plugins/opencode-cut.yaml b/data/plugins/opencode-cut.yaml new file mode 100644 index 0000000..038130b --- /dev/null +++ b/data/plugins/opencode-cut.yaml @@ -0,0 +1,8 @@ +name: Cut +repo: https://github.com/aiev/opencode-cut +tagline: Clipboard-aware Ctrl+X cut for prompt and dialog inputs +description: Makes Ctrl+X cut selected text in prompt and dialog inputs. Copies to the system clipboard first and deletes only after the write succeeds; leaves the input untouched if the selection or focused editor changes, and ignores repeated cut requests while a copy is pending. +kind: plugin +topics: + - ui +compat: v2 diff --git a/data/plugins/opencode-deepseek-peak.yaml b/data/plugins/opencode-deepseek-peak.yaml new file mode 100644 index 0000000..54af02e --- /dev/null +++ b/data/plugins/opencode-deepseek-peak.yaml @@ -0,0 +1,9 @@ +name: DeepSeek Peak +repo: https://github.com/aiev/opencode-deepseek-peak +tagline: DeepSeek peak/off-peak pricing, Chinese holidays included +description: Shows whether DeepSeek is in its peak or off-peak pricing window. Applies the official rule including Chinese public holidays, treats a response pricing header as the source of truth and flags mismatches, adds a compact next-change time (local or UTC, with weekday) in a single non-wrapping sidebar line, works before the first request via a preview marker, and speaks English, Portuguese, Chinese, Japanese, and Korean. Supports OpenCode V2 and V1. +kind: plugin +topics: + - cost + - providers +compat: v2 diff --git a/data/plugins/opencode-dir-tree-tui.yaml b/data/plugins/opencode-dir-tree-tui.yaml new file mode 100644 index 0000000..02cabb2 --- /dev/null +++ b/data/plugins/opencode-dir-tree-tui.yaml @@ -0,0 +1,9 @@ +name: opencode-dir-tree-tui +repo: https://github.com/aihaipeng/opencode-dir-tree-tui +tagline: File tree sidebar with Git status and quick file actions +description: Browse project files in the OpenCode V2 sidebar with Git status indicators, custom ignore rules, path copying, and quick file and folder opening. +kind: plugin +topics: + - ui + - git +compat: v2 diff --git a/data/plugins/opencode-docker-panel.yaml b/data/plugins/opencode-docker-panel.yaml new file mode 100644 index 0000000..ef9d786 --- /dev/null +++ b/data/plugins/opencode-docker-panel.yaml @@ -0,0 +1,9 @@ +name: OpenCode Docker Panel +repo: https://github.com/victor-ochenin/opencodeDockerPlugin +tagline: Docker containers in the TUI sidebar, with control and logs +description: Shows the running containers in the session sidebar with their state, published ports and compose project, and a pin keeps a container visible whatever its state. Clicking a row opens the actions docker accepts for that container's current state - start, stop, restart, tearing down its compose project behind a confirmation, or starting the stack declared by the compose file in the agent directory - and the same window doubles as a scrollable log view. +kind: plugin +topics: + - environment + - ui +compat: v2 diff --git a/data/plugins/opencode-ensemble.yaml b/data/plugins/opencode-ensemble.yaml index d730110..dfe56c4 100644 --- a/data/plugins/opencode-ensemble.yaml +++ b/data/plugins/opencode-ensemble.yaml @@ -1,8 +1,14 @@ name: OpenCode Ensemble repo: https://github.com/hueyexe/opencode-ensemble +npm: "@hueyexe/opencode-ensemble" +homepage: https://www.npmjs.com/package/@hueyexe/opencode-ensemble tagline: Parallel agent teams for OpenCode description: Coordinate parallel OpenCode agents with peer messaging, a shared task board, git worktree isolation, and a live dashboard. -homepage: https://www.npmjs.com/package/@hueyexe/opencode-ensemble +kind: plugin +topics: + - orchestration + - git +compat: v2 tags: - agents - multi-agent diff --git a/data/plugins/opencode-fold-tools.yaml b/data/plugins/opencode-fold-tools.yaml new file mode 100644 index 0000000..5815a0d --- /dev/null +++ b/data/plugins/opencode-fold-tools.yaml @@ -0,0 +1,12 @@ +name: opencode-fold-tools +repo: https://github.com/ningzimu/opencode-fold-tools +tagline: Expand tool outputs on click, with one row per call and native file diffs. +description: |- + Keeps each OpenCode TUI tool call on its own line in conversation order. + Click to reveal output underneath while preserving the input summary, + or use Ctrl+O to toggle all matched rows. Retains native colored file diffs + and provides a full tool-record viewer. Includes npm installation and a GIF demo. +kind: plugin +topics: + - ui +compat: v2 diff --git a/data/plugins/opencode-free-models.yaml b/data/plugins/opencode-free-models.yaml new file mode 100644 index 0000000..442084c --- /dev/null +++ b/data/plugins/opencode-free-models.yaml @@ -0,0 +1,38 @@ +name: Free Models Router +repo: https://github.com/murcanlat/opencode-free-models +tagline: Free model discovery, prompt routing, and seamless quota fallback +description: Discovers free models from OpenRouter and models.dev, routes each prompt to the best free candidate by capability and score, and falls back to the next free model on rate limits, quota exhaustion, or 5xx errors. Ships cycle/stop/retry-last/wait fallback modes, cooldowns, configurable backoff, an optional circuit breaker, status/refresh/select tools, an RPC API, and an optional TUI plugin for toast notifications. +kind: plugin +topics: + - providers + - cost +compat: v2 +scope: + - global + - project +tags: + - models + - routing + - fallback + - rate-limit + - free-models + - openrouter +min_version: 2.0.16 +installation: | + Add it to `opencode.jsonc`: + + ```jsonc + { + "$schema": "https://opencode.ai/config.json", + "plugins": ["opencode-free-models"] + } + ``` + + Or install from the CLI: + + ```sh + opencode plugin add opencode-free-models + ``` + + Optional TUI toasts: add `"opencode-free-models/tui"` to the `plugins` array + in `cli.json`. diff --git a/data/plugins/opencode-github-release.yaml b/data/plugins/opencode-github-release.yaml index c3ac563..f4234f1 100644 --- a/data/plugins/opencode-github-release.yaml +++ b/data/plugins/opencode-github-release.yaml @@ -2,3 +2,7 @@ name: GitHub Release repo: https://github.com/amestsantim/opencode-github-release tagline: Automated GitHub releases description: Create and publish GitHub releases with semantic versioning, tag management, and auto-generated release notes. +kind: plugin +topics: + - git +compat: v2 diff --git a/data/plugins/opencode-go-whoami.yaml b/data/plugins/opencode-go-whoami.yaml new file mode 100644 index 0000000..345b4a8 --- /dev/null +++ b/data/plugins/opencode-go-whoami.yaml @@ -0,0 +1,10 @@ +name: opencode-go-whoami +repo: https://github.com/senorMk/opencode-go-whoami +tagline: Display local email labels for OpenCode Go/Zen accounts +description: Identify your OpenCode Go/Zen accounts through user-assigned email labels, a permanent sidebar panel, and /go-whoami. Runs locally and displays only masked keys and fingerprints. +kind: plugin +topics: + - providers + - ui +compat: v2 +min_version: 2.0.0 diff --git a/data/plugins/opencode-goal.yaml b/data/plugins/opencode-goal.yaml new file mode 100644 index 0000000..9f2e43c --- /dev/null +++ b/data/plugins/opencode-goal.yaml @@ -0,0 +1,20 @@ +name: Goal +repo: https://github.com/KelpHect/opencode-goal +tagline: Persistent /goal mode that keeps a session working across turns +description: A port of OpenAI Codex's /goal for OpenCode v2. Registers a /goal command plus create_goal/get_goal/update_goal tools. The session keeps re-prompting itself until the objective is complete, with token budgets, completion audits, and a bundled goal skill. +kind: plugin +topics: + - workflow +compat: v2 +scope: + - global + - project +tags: + - workflow + - agents +min_version: 2.0.0 +installation: | + ```bash + opencode plugin add github:KelpHect/opencode-goal + ``` + Pin a release with `github:KelpHect/opencode-goal#v0.2.1`. diff --git a/data/plugins/opencode-goopspec.yaml b/data/plugins/opencode-goopspec.yaml index e8284d8..04b6bcd 100644 --- a/data/plugins/opencode-goopspec.yaml +++ b/data/plugins/opencode-goopspec.yaml @@ -1,4 +1,8 @@ name: GoopSpec -repo: https://github.com/hffmnnj/opencode-goopspec +repo: https://github.com/hffmnnj/goopspec tagline: Spec-driven development workflow description: Transforms AI-assisted coding with spec-driven workflows. Features 5-phase workflow (Plan, Research, Specify, Execute, Accept), contract gates for user confirmation, 12 specialized subagents, persistent memory system, wave-based execution with atomic commits, and deviation rules for handling unexpected situations. +kind: plugin +topics: + - workflow +compat: v2 diff --git a/data/plugins/opencode-gpt-imagegen.yaml b/data/plugins/opencode-gpt-imagegen.yaml index 3d6a4d2..b073ff8 100644 --- a/data/plugins/opencode-gpt-imagegen.yaml +++ b/data/plugins/opencode-gpt-imagegen.yaml @@ -2,6 +2,11 @@ name: GPT Imagegen repo: https://github.com/yuji-hatakeyama/opencode-gpt-imagegen tagline: gpt-image-2 in OpenCode — no API cost when using your ChatGPT subscription description: Brings gpt-image-2 (ChatGPT Images 2) image generation to OpenCode. When you sign into OpenCode with your ChatGPT account, generations are billed against your existing Plus / Pro / Business plan — no per-image API cost. An OpenAI API key path is also planned. Supports reference images for style guidance and edits. +kind: plugin +topics: + - media + - providers +compat: v1 tags: - openai - gpt-image-2 diff --git a/data/plugins/opencode-hooks-plugin.yaml b/data/plugins/opencode-hooks-plugin.yaml index 37da136..fc92feb 100644 --- a/data/plugins/opencode-hooks-plugin.yaml +++ b/data/plugins/opencode-hooks-plugin.yaml @@ -2,3 +2,7 @@ name: Opencode Hooks Plugin repo: https://github.com/romain325/opencode-hooks-plugin tagline: Claude code compatible hooks description: Use Claude code hooks definition and hook them to opencode hooks. +kind: plugin +topics: + - workflow +compat: v1 diff --git a/data/plugins/opencode-host-notify-bridge.yaml b/data/plugins/opencode-host-notify-bridge.yaml index 61a6161..4b42a25 100644 --- a/data/plugins/opencode-host-notify-bridge.yaml +++ b/data/plugins/opencode-host-notify-bridge.yaml @@ -1,8 +1,14 @@ name: Opencode Host Notify Bridge repo: https://github.com/Zaradacht/opencode-host-notify-bridge +npm: opencode-host-notify-bridge homepage: https://github.com/Zaradacht/opencode-host-notify-bridge tagline: Devcontainer notifications bridged back to the host description: OpenCode plugin and host helper that forward permission, question, and idle notifications from devcontainers to the host machine for desktop alerts and sound. +kind: plugin +topics: + - notifications + - environment +compat: v1 scope: - global tags: diff --git a/data/plugins/opencode-idea-inbox.yaml b/data/plugins/opencode-idea-inbox.yaml new file mode 100644 index 0000000..9639b97 --- /dev/null +++ b/data/plugins/opencode-idea-inbox.yaml @@ -0,0 +1,40 @@ +name: Idea Inbox +repo: https://github.com/apilot/opencode-idea-inbox +npm: opencode-idea-inbox +tagline: Capture stray thoughts into a sidebar backlog, then dispatch them to agents without derailing your session +description: "A persistent idea backlog for the opencode v2 TUI. Mid-conversation, press leader+z (or run /idea) to park a thought in the Idea Inbox sidebar without leaving your current task — no notes app, no derailing the agent. When you have a free moment, press leader+i and pick a pending idea: a delegation mission lands in your current session and execution starts immediately, while the sidebar status flips from parked to running to done as the agent works. Agents can manage the backlog themselves through idea_add/idea_list/ idea_update/idea_start tools, and a \"documented\" status archives an idea after its result is written up. Storage is per-worktree SQLite, so the backlog survives restarts. Ships for opencode v2 (this entry) and as a legacy v1 line: opencode-idea-inbox@legacy-v1." +kind: plugin +topics: + - workflow + - ui +compat: v2 +scope: + - global + - project +tags: + - productivity + - backlog + - tui + - sidebar + - workflow +min_version: 2.0.20 +installation: | + ## Installation (opencode v2) + + Add one line to the `plugins` key of your `opencode.json` — global + (`~/.config/opencode/opencode.json`) or per-project: + + ```jsonc + { + "plugins": ["opencode-idea-inbox"] + } + ``` + + One entry loads both halves of the plugin: the server part (tools, events, + slash commands) and the TUI part (sidebar, hotkeys). Restart opencode. + + Note: opencode v2 reads the `plugins` key (plural). The v1 `plugin` key is + silently ignored — that is the #1 "it doesn't load" cause. + + On opencode v1? Install the legacy line instead: + `"plugin": ["opencode-idea-inbox@legacy-v1"]`. diff --git a/data/plugins/opencode-ignore.yaml b/data/plugins/opencode-ignore.yaml index 6bb33a4..8ff4e1c 100644 --- a/data/plugins/opencode-ignore.yaml +++ b/data/plugins/opencode-ignore.yaml @@ -2,3 +2,8 @@ name: Opencode Ignore repo: https://github.com/lgladysz/opencode-ignore tagline: Ignore files based on pattern description: Plugin to ignore directory/file based on pattern. +kind: plugin +topics: + - context + - security +compat: v1 diff --git a/data/plugins/opencode-indexing.yaml b/data/plugins/opencode-indexing.yaml new file mode 100644 index 0000000..fd695fd --- /dev/null +++ b/data/plugins/opencode-indexing.yaml @@ -0,0 +1,72 @@ +name: OpenCode Indexing +repo: https://github.com/Javierkaiser/opencode-indexing +homepage: https://github.com/Javierkaiser/opencode-indexing#readme +tagline: Semantic code search for OpenCode that reuses Kilo Code's index and keeps its own incremental one. +description: |- + Adds semantic (vector) code search to OpenCode. It reads Kilo Code's existing + index (Qdrant ws-* collections and Kilo's local LanceDB) without ever modifying + it, and can import those vectors and chunks at zero embedding cost, then keep + its own incremental index (Qdrant oc-* collections or embedded LanceDB) keyed + on a per-file SHA-256. Search merges results from both indexes, so semantic + search keeps working even when Kilo is not installed, is disabled, or its index + is stale. + + - Reuse Kilo Code's index read-only, importing vectors without re-embedding + - Own incremental index with manifest-based freshness (new/changed/deleted only) + - Vector-store agnostic: Qdrant or embedded LanceDB + - Settings and index actions from the TUI, Desktop and web clients + - Supported embedding providers: Mistral, OpenAI, Ollama, Gemini, Voyage, + OpenRouter and any OpenAI-compatible endpoint +kind: plugin +topics: + - code-intel +compat: v2 +scope: + - global +tags: + - semantic-search + - code-search + - indexing + - embeddings + - qdrant + - lancedb +min_version: 2.0.0 +installation: | + ## Prerequisites + - OpenCode v2 (plugin API `@opencode/plugin` 2.x) + - Node.js >= 22.6 + - Optional: a Qdrant server and/or the `@lancedb/lancedb` module + + ## Installation + + ### Installer (recommended, cross-platform) + + ```bash + # Linux / macOS + ./install.sh + # Windows + powershell -ExecutionPolicy Bypass -File .\install.ps1 + # any platform (the wrappers call this) + node install.mjs + ``` + + ### From npm + + ```bash + npm install @javierkaiser/opencode-indexing + ``` + + Then reference it from `opencode.json`: + + ```jsonc + { + "plugins": [ + { "package": "@javierkaiser/opencode-indexing" } + ] + } + ``` + + ## Configuration + + Settings live in `~/.config/opencode/indexing.json` and are editable from + `/indexing-config` (any client) or the `/indexing` page (terminal TUI). diff --git a/data/plugins/opencode-lens-image-preview.yaml b/data/plugins/opencode-lens-image-preview.yaml new file mode 100644 index 0000000..4f558bd --- /dev/null +++ b/data/plugins/opencode-lens-image-preview.yaml @@ -0,0 +1,9 @@ +name: Image Preview +repo: https://github.com/Flickwire-Agent/opencode-lens-image-preview +tagline: Inline image previews from URLs in OpenCode Web +description: A Lens plugin that renders images from URLs inline in OpenCode Web chat. Supports markdown image syntax (\![alt](url)) and raw image URLs. Features click-to-expand, lazy loading, code block protection, and error fallbacks. +kind: plugin +topics: + - media + - ui +compat: v2 diff --git a/data/plugins/opencode-lens-wuxiaoqiang12.yaml b/data/plugins/opencode-lens-wuxiaoqiang12.yaml new file mode 100644 index 0000000..3600fd5 --- /dev/null +++ b/data/plugins/opencode-lens-wuxiaoqiang12.yaml @@ -0,0 +1,43 @@ +name: opencode-lens +repo: https://github.com/wuxiaoqiang12/opencode-lens +npm: opencode-lens +homepage: https://github.com/wuxiaoqiang12/opencode-lens +tagline: TUI bridge and MCP toolkit for inspecting and controlling live opencode sessions +description: opencode-lens is an opencode TUI plugin plus MCP server that lets external agents inspect running opencode instances, send prompts, read messages/diffs/todos, handle permission and question prompts, and monitor session completion through a local Unix socket bridge. +kind: plugin +topics: + - sessions + - ui + - observability +compat: v1 +scope: + - global +tags: + - mcp + - tui + - automation + - sessions + - monitoring +installation: | + Add the TUI plugin to `~/.config/opencode/tui.json`: + + ```json + { + "$schema": "https://opencode.ai/tui.json", + "plugin": ["opencode-lens"] + } + ``` + + Restart opencode. opencode resolves and caches the npm plugin package automatically. + + For Hermes or other MCP clients, run the MCP server with `npx`: + + ```yaml + mcp_servers: + opencode-lens: + command: npx + args: + - -y + - opencode-lens-mcp + enabled: true + ``` diff --git a/data/plugins/opencode-lens.yaml b/data/plugins/opencode-lens.yaml new file mode 100644 index 0000000..66a4361 --- /dev/null +++ b/data/plugins/opencode-lens.yaml @@ -0,0 +1,8 @@ +name: Lens +repo: https://github.com/Flickwire-Agent/opencode-lens +tagline: Plugin injection framework for OpenCode Web +description: A local reverse proxy that loads web plugins and injects them into the OpenCode Web HTML response. Adds script injection, an integrated settings UI for toggling plugins, and a simple manifest format for building browser-side OpenCode Web plugins. Enables extending the OpenCode Web UI with custom JavaScript modules, HTML injection, and interactive controls. +kind: plugin +topics: + - ui +compat: v2 diff --git a/data/plugins/opencode-listen-stt.yaml b/data/plugins/opencode-listen-stt.yaml new file mode 100644 index 0000000..5ec4a6b --- /dev/null +++ b/data/plugins/opencode-listen-stt.yaml @@ -0,0 +1,8 @@ +name: Listen STT +repo: https://github.com/fahrim/opencode-listen-stt +tagline: Offline dictation, 99 languages +description: Voice dictation for OpenCode V2 on Windows. Runs whisper.cpp locally across 99 languages, pins the spoken language so it is not mis-detected, and uses CUDA or Vulkan automatically. Nothing leaves the machine. +kind: plugin +topics: + - voice +compat: v2 diff --git a/data/plugins/opencode-litellm.yaml b/data/plugins/opencode-litellm.yaml index cd6e79e..ef507db 100644 --- a/data/plugins/opencode-litellm.yaml +++ b/data/plugins/opencode-litellm.yaml @@ -1,13 +1,17 @@ name: Opencode LiteLLM repo: https://github.com/yuseferi/opencode-litellm tagline: Auto-discover models from a LiteLLM proxy -description: | +description: |- Drop-in LiteLLM provider for OpenCode with zero configuration. Auto-detects a running LiteLLM proxy on common ports (4000, 8000, 8080), pulls every model from /v1/models, and registers them in OpenCode automatically — no model lists to hand-maintain. Smart name formatting, modality categorization (chat/embedding/image/audio), provider extraction, optional API-key auth, and a 5-second timeout so a slow proxy never blocks startup. +kind: plugin +topics: + - providers +compat: v2 scope: - global - project diff --git a/data/plugins/opencode-log-sanitizer.yaml b/data/plugins/opencode-log-sanitizer.yaml index 8156110..d1a342d 100644 --- a/data/plugins/opencode-log-sanitizer.yaml +++ b/data/plugins/opencode-log-sanitizer.yaml @@ -1,4 +1,8 @@ name: Opencode Log Sanitizer repo: https://github.com/errhythm/opencode-log-sanitizer tagline: Sanitizes pasted logs by redacting long strings, JWTs, bcrypt hashes, and base64 blobs -description: Sanitizes pasted logs before sending them to AI by redacting long quoted strings, JWT tokens, bcrypt hashes, and base64 blobs to reduce token usage and remove irrelevant noise. \ No newline at end of file +description: Sanitizes pasted logs before sending them to AI by redacting long quoted strings, JWT tokens, bcrypt hashes, and base64 blobs to reduce token usage and remove irrelevant noise. +kind: plugin +topics: + - security +compat: v1 diff --git a/data/plugins/opencode-mem.yaml b/data/plugins/opencode-mem.yaml index 2822faa..f0d51db 100644 --- a/data/plugins/opencode-mem.yaml +++ b/data/plugins/opencode-mem.yaml @@ -1,4 +1,8 @@ name: Opencode Mem repo: https://github.com/tickernelz/opencode-mem -tagline: Persistent memory with vector database -description: A persistent memory system for AI coding agents that enables long-term context retention across sessions using local vector database technology. Features dual memory scopes, web interface, auto-capture system, and multi-provider AI support. +tagline: Persistent local memory with Turso/libSQL vector search +description: A persistent memory system for AI coding agents that enables long-term context retention across sessions using embedded Turso/libSQL vector search. Features dual memory scopes, auto-capture, user profile learning, a full web UI, and multi-provider AI support. +kind: plugin +topics: + - memory +compat: v2 diff --git a/data/plugins/opencode-mempalace-persistence.yaml b/data/plugins/opencode-mempalace-persistence.yaml new file mode 100644 index 0000000..4208c2d --- /dev/null +++ b/data/plugins/opencode-mempalace-persistence.yaml @@ -0,0 +1,26 @@ +name: Opencode MemPalace Persistence +repo: https://github.com/geco/opencode-mempalace-persistence +npm: opencode-mempalace-persistence +homepage: https://www.npmjs.com/package/opencode-mempalace-persistence +tagline: Local-first persistent memory for OpenCode, backed by MemPalace +description: "Saves every conversation to a local MemPalace palace and recalls it verbatim in later sessions. Mines run on idle, exit and startup — never mid-reply. Zero-config: the plugin registers its own read-only MCP entry, so multiple OpenCode tabs never starve each other on the palace writer lock. Ships a live sidebar status line and a companion local browser/curator (penfield) for timeline, knowledge graph, thread view and duplicate healing." +kind: plugin +topics: + - memory +compat: v2 +scope: + - global +tags: + - memory + - mempalace + - persistence + - knowledge-graph + - mcp +min_version: 1.18.29 +installation: |- + 1. Install MemPalace: `pipx install mempalace` then `mempalace init ~/opencode-memory` + 2. Add to `~/.config/opencode/opencode.json`: + ```json + { "plugin": ["opencode-mempalace-persistence"] } + ``` + 3. Restart OpenCode. The plugin registers its own read-only MemPalace MCP entry; to backfill existing history once, run `OPENCODE_MEMPALACE_BACKFILL=1 opencode`. diff --git a/data/plugins/opencode-mesh.yaml b/data/plugins/opencode-mesh.yaml new file mode 100644 index 0000000..926589c --- /dev/null +++ b/data/plugins/opencode-mesh.yaml @@ -0,0 +1,8 @@ +name: OpenCode Mesh +repo: https://github.com/divisionseven/opencode-mesh +tagline: The missing agent-to-agent messenger for OpenCode +description: The free OpenCode plugin that lets your agents communicate directly with any session on your machine. Separate projects, separate terminals, separate models, one connected team. +kind: plugin +topics: + - orchestration +compat: v2 diff --git a/data/plugins/opencode-mission-control.yaml b/data/plugins/opencode-mission-control.yaml index 08e831c..ca4cbdc 100644 --- a/data/plugins/opencode-mission-control.yaml +++ b/data/plugins/opencode-mission-control.yaml @@ -2,3 +2,8 @@ name: OpenCode Mission Control repo: https://github.com/nigel-dev/opencode-mission-control tagline: Command center for parallel agents — worktree isolation, DAG plans, merge train, PRs description: Orchestrates parallel OpenCode agents in tmux-isolated git worktrees with live inspection (capture/attach/diff), a dashboard overview, agent status reporting, and in-chat notifications. Supports DAG-based plans with autopilot/copilot/supervisor modes and a merge train with test gating and automatic rollback. +kind: plugin +topics: + - orchestration + - git +compat: v1 diff --git a/data/plugins/opencode-mlflow-plugin.yaml b/data/plugins/opencode-mlflow-plugin.yaml new file mode 100644 index 0000000..7f5edd1 --- /dev/null +++ b/data/plugins/opencode-mlflow-plugin.yaml @@ -0,0 +1,8 @@ +name: opencode-mlflow-plugin +repo: https://github.com/MunhozThiago/opencode-mlflow-plugin +tagline: Track OpenCode session metrics and tool execution timings in MLflow. +description: Records OpenCode sessions as MLflow runs with message and tool counts, tool execution timings, and agent, model, and provider tags. Connects to a local MLflow tracking server for comparing session metrics. Available on npm as opencode-mlflow-plugin. +kind: plugin +topics: + - observability +compat: v1 diff --git a/data/plugins/opencode-model-alias.yaml b/data/plugins/opencode-model-alias.yaml new file mode 100644 index 0000000..a2ac8fe --- /dev/null +++ b/data/plugins/opencode-model-alias.yaml @@ -0,0 +1,8 @@ +name: OpenCode Model Alias +repo: https://github.com/renaudcerrato/opencode-model-alias +tagline: Portable model aliases with variants and chains — one config entry, per-machine remapping +description: Define short model aliases (cheap, smart, reviewer...) in a central alias file and reference them in any agent or command model field. Each machine maps aliases to whatever provider/model it prefers, so shared agent and command configs stay portable across machines and providers. Supports model variants, alias chains (stable role names layered on machine-specific mappings), and a /alias command for managing aliases in-session. +kind: plugin +topics: + - providers +compat: v2 diff --git a/data/plugins/opencode-model-aliases.yaml b/data/plugins/opencode-model-aliases.yaml new file mode 100644 index 0000000..fbbb976 --- /dev/null +++ b/data/plugins/opencode-model-aliases.yaml @@ -0,0 +1,8 @@ +name: OpenCode Model Aliases +repo: https://github.com/vmvarela/opencode-model-aliases +tagline: Provider-scoped aliases for the newest eligible OpenCode models +description: Create stable model IDs within a provider using glob, capability, and context filters. On catalog refresh, each alias resolves to the newest eligible model already in OpenCode's catalog. +kind: plugin +topics: + - providers +compat: v2 diff --git a/data/plugins/opencode-models-discovery.yaml b/data/plugins/opencode-models-discovery.yaml index 24e5c4d..e01512b 100644 --- a/data/plugins/opencode-models-discovery.yaml +++ b/data/plugins/opencode-models-discovery.yaml @@ -2,3 +2,7 @@ name: Opencode Models Discovery repo: https://github.com/yuhp/opencode-models-discovery tagline: Configurable model discovery and filtering without long manual config description: OpenCode plugin for discovering models from OpenAI-compatible providers and API gateways, with provider and model filtering so users can avoid maintaining large configs or loading every model at once. +kind: plugin +topics: + - providers +compat: v2 diff --git a/data/plugins/opencode-multi-usage.yaml b/data/plugins/opencode-multi-usage.yaml new file mode 100644 index 0000000..9431e15 --- /dev/null +++ b/data/plugins/opencode-multi-usage.yaml @@ -0,0 +1,9 @@ +name: OpenCode Multi-Usage +repo: https://github.com/Bugg4/opencode-multi-usage +tagline: One OpenCode plugin for multiple AI subscription quotas +description: An easily extensible OpenCode plugin for tracking AI subscription quotas. Add provider integrations with minimal effort; each is opt-in, with support for ChatGPT Codex, OpenCode Go, CommandCode and more. +kind: plugin +topics: + - cost + - providers +compat: v2 diff --git a/data/plugins/opencode-mystatus.yaml b/data/plugins/opencode-mystatus.yaml index fe5a8ae..c1cc7a7 100644 --- a/data/plugins/opencode-mystatus.yaml +++ b/data/plugins/opencode-mystatus.yaml @@ -2,3 +2,8 @@ name: opencode-mystatus repo: https://github.com/vbgate/opencode-mystatus tagline: Check AI subscription quotas description: Check all your AI subscription quotas in one command. Supports OpenAI (Plus/Pro/Codex, etc.), Zhipu AI, Google Antigravity, and more. +kind: plugin +topics: + - cost + - providers +compat: v1 diff --git a/data/plugins/opencode-notify.yaml b/data/plugins/opencode-notify.yaml index cccdc2a..9d9e202 100644 --- a/data/plugins/opencode-notify.yaml +++ b/data/plugins/opencode-notify.yaml @@ -2,3 +2,7 @@ name: Opencode Notify repo: https://github.com/kdcokenny/opencode-notify tagline: Native OS notifications description: Native OS notifications for OpenCode - know when tasks complete. +kind: plugin +topics: + - notifications +compat: v1 diff --git a/data/plugins/opencode-ntfy.sh.yaml b/data/plugins/opencode-ntfy.sh.yaml index e05e9ac..3009b2e 100644 --- a/data/plugins/opencode-ntfy.sh.yaml +++ b/data/plugins/opencode-ntfy.sh.yaml @@ -1,4 +1,8 @@ name: OpenCode ntfy.sh repo: https://github.com/lannuttia/opencode-ntfy.sh tagline: Push notifications to keep you in the know, even when you're on the go. -description: "An OpenCode plugin that adds push notifications through ntfy.sh." +description: An OpenCode plugin that adds push notifications through ntfy.sh. +kind: plugin +topics: + - notifications +compat: v1 diff --git a/data/plugins/opencode-obvious-grid.yaml b/data/plugins/opencode-obvious-grid.yaml new file mode 100644 index 0000000..9ed7d3a --- /dev/null +++ b/data/plugins/opencode-obvious-grid.yaml @@ -0,0 +1,19 @@ +name: OpenCode Obvious Grid +repo: https://github.com/ray062/opencode-obvious-grid +npm: opencode-obvious-grid +tagline: The obvious grid — know what every agent is doing from across the room +description: "Ever squinted at five terminals trying to figure out who's actually working? This plugin puts every opencode instance on one big screen as a giant color-coded card — orange = working, blue = waiting on you, red = errored, green = idle. Readable from across the room, so \"obvious\" is not just a vibe, it's a font size. Stick it on the wall display and you'll never walk over to squint again. It's a grid, but make it fashion: each card carries live tokens, cost, cache rates, speed graphs, git branch, and deep links into web sessions — plus built-in ntfy push and alarm-sound notifications, because even an obvious grid needs to yell at you sometimes. Zero infrastructure: the plugin serves its own page. One install. Infinite peace of mind. Your agents will never know they're being watched." +kind: plugin +topics: + - observability + - ui + - notifications +compat: v1 +scope: + - global +tags: + - status + - dashboard + - monitoring + - notifications +installation: Run `opencode plugin opencode-obvious-grid -g`, restart opencode, and open http://localhost:8765. diff --git a/data/plugins/opencode-orchestrator.yaml b/data/plugins/opencode-orchestrator.yaml new file mode 100644 index 0000000..97fb821 --- /dev/null +++ b/data/plugins/opencode-orchestrator.yaml @@ -0,0 +1,24 @@ +name: Orchestrator +repo: https://github.com/KelpHect/opencode-orchestrator +tagline: Cost-aware subagent routing skill plus injected orchestration instructions +description: "Teaches the primary agent to route work to the right subagent tier: an `orchestrator` skill with routing rules, prompt templates and an escalation ladder; routing rules injected into primary sessions; subagent conduct rules injected into child sessions; and example agent-tier definitions." +kind: plugin +topics: + - orchestration + - providers + - cost +compat: v2 +scope: + - global + - project +tags: + - orchestration + - agents + - skills +min_version: 2.0.0 +installation: | + ```bash + opencode plugin add github:KelpHect/opencode-orchestrator + ``` + Merge `examples/opencode.jsonc` into your config to define the agent tiers. + Pin a release with `github:KelpHect/opencode-orchestrator#v0.1.1`. diff --git a/data/plugins/opencode-personality.yaml b/data/plugins/opencode-personality.yaml index 3662be1..0eac83f 100644 --- a/data/plugins/opencode-personality.yaml +++ b/data/plugins/opencode-personality.yaml @@ -1,4 +1,8 @@ name: opencode-personality repo: https://github.com/joostvanwollingen/opencode-personality tagline: A configurable personality and mood system plugin for OpenCode. -description: Give your AI assistant a distinct personality with customizable moods that drift over time. \ No newline at end of file +description: Give your AI assistant a distinct personality with customizable moods that drift over time. +kind: plugin +topics: + - prompting +compat: v1 diff --git a/data/plugins/opencode-plan-manager.yaml b/data/plugins/opencode-plan-manager.yaml index 0f3ccf0..d1f6fdd 100644 --- a/data/plugins/opencode-plan-manager.yaml +++ b/data/plugins/opencode-plan-manager.yaml @@ -2,3 +2,7 @@ name: OpenCode Plan Manager repo: https://github.com/yurihbm/opencode-plan-manager tagline: AI-Native Implementation Planning for Modern Agentic Workflows description: High-performance, minimalist plugin designed to bridge the gap between complex implementation strategies and autonomous execution. Selective context loading, zero-hallucination schemas, visible filesystem kanban. +kind: plugin +topics: + - workflow +compat: v1 diff --git a/data/plugins/opencode-plugin-openspec.yaml b/data/plugins/opencode-plugin-openspec.yaml index 32aeb1b..95a82d2 100644 --- a/data/plugins/opencode-plugin-openspec.yaml +++ b/data/plugins/opencode-plugin-openspec.yaml @@ -2,3 +2,7 @@ name: OpenSpec repo: https://github.com/Octane0411/opencode-plugin-openspec tagline: Add Architecture planning and specification agent for OpenSpec description: An OpenCode plugin that integrates OpenSpec, providing a dedicated agent for planning and specifying software architecture. +kind: plugin +topics: + - workflow +compat: v1 diff --git a/data/plugins/opencode-plugin-otel.yaml b/data/plugins/opencode-plugin-otel.yaml index 3f4a08f..57e2f7f 100644 --- a/data/plugins/opencode-plugin-otel.yaml +++ b/data/plugins/opencode-plugin-otel.yaml @@ -2,3 +2,7 @@ name: opencode-plugin-otel repo: https://github.com/DEVtheOPS/opencode-plugin-otel tagline: OpenTelemetry telemetry exporter for opencode sessions, mirroring Claude Code monitoring signals description: Exports metrics, logs, and traces from opencode sessions via OTLP/gRPC to any OpenTelemetry-compatible backend (Datadog, Honeycomb, Grafana Cloud, etc.). Instruments session lifecycle, token usage, cost, tool durations, and git commits — mirroring the same signals as Claude Code's monitoring. +kind: plugin +topics: + - observability +compat: v2 diff --git a/data/plugins/opencode-pr-signature.yaml b/data/plugins/opencode-pr-signature.yaml index ffaa916..cd7afc5 100644 --- a/data/plugins/opencode-pr-signature.yaml +++ b/data/plugins/opencode-pr-signature.yaml @@ -2,3 +2,7 @@ name: PR Auto-Signature repo: https://github.com/arttttt/opencode-pr-signature tagline: Automatically adds AI model signature to PRs, Issues, and Commits description: Plugin that automatically appends AI model signature to Pull Requests, Issues, and git commit messages. Supports GitHub MCP tools, git CLI, and gh CLI. Recognizes 90+ AI models including Claude, GPT, Gemini, DeepSeek, Llama, Mistral, and more. +kind: plugin +topics: + - git +compat: v2 diff --git a/data/plugins/opencode-pre-tool-review.yaml b/data/plugins/opencode-pre-tool-review.yaml new file mode 100644 index 0000000..85fca34 --- /dev/null +++ b/data/plugins/opencode-pre-tool-review.yaml @@ -0,0 +1,8 @@ +name: opencode-pre-tool-review +repo: https://github.com/yehweihsu/opencode-pre-tool-review +tagline: Model-assisted pre-execution review for OpenCode V2 tool permissions +description: Experimental OpenCode V2 plugin that reviews tool permission checks using a configurable reviewer model before execution. Integrates with OpenCode's native permission system, supports conservative read-only whitelisting, and offers user-confirmed one-time releases for blocked actions. +kind: plugin +topics: + - security +compat: v2 diff --git a/data/plugins/opencode-provider-alias.yaml b/data/plugins/opencode-provider-alias.yaml index 7c190b7..f76c5d4 100644 --- a/data/plugins/opencode-provider-alias.yaml +++ b/data/plugins/opencode-provider-alias.yaml @@ -2,3 +2,7 @@ name: OpenCode Provider Alias repo: https://github.com/baranwang/opencode-provider-alias tagline: Alias and curate OpenCode providers with model metadata from models.dev. description: Lets users define local OpenCode provider and model aliases hydrated from existing models.dev metadata. +kind: plugin +topics: + - providers +compat: v1 diff --git a/data/plugins/opencode-provider-guard.yaml b/data/plugins/opencode-provider-guard.yaml new file mode 100644 index 0000000..711e773 --- /dev/null +++ b/data/plugins/opencode-provider-guard.yaml @@ -0,0 +1,20 @@ +name: OpenCode Provider Guard +repo: https://github.com/okram78/opencode-provider-guard +tagline: Restrict available providers by project directory +description: |- + An OpenCode V2 plugin that lets you choose which providers are available in + each project, so you can keep personal or pay-as-you-go providers out of + selected projects. +kind: plugin +topics: + - providers + - security + - prompting +compat: v2 +scope: + - global +tags: + - provider + - allowlist + - access-control + - directory-rules diff --git a/data/plugins/opencode-prs.yaml b/data/plugins/opencode-prs.yaml new file mode 100644 index 0000000..5befd0a --- /dev/null +++ b/data/plugins/opencode-prs.yaml @@ -0,0 +1,31 @@ +name: PRs +repo: https://github.com/vvo/opencode-plugins +path: packages/prs +npm: opencode-prs +homepage: https://www.npmjs.com/package/opencode-prs +tagline: Lists GitHub pull requests referenced by the current session +description: OpenCode TUI plugin that lists GitHub pull requests opened by the current session in the sidebar, with titles scrolling on hover. Requires an installed and authenticated GitHub CLI. +kind: plugin +topics: + - git + - ui +compat: v2 +scope: + - global +tags: + - github + - pull-requests + - tui + - sidebar +installation: | + OpenCode 2, in `~/.config/opencode/cli.json`: + + ```json + { "plugins": ["opencode-prs"] } + ``` + + OpenCode 1, in `~/.config/opencode/tui.json`: + + ```json + { "plugin": ["opencode-prs"] } + ``` diff --git a/data/plugins/opencode-qoder-bridge.yaml b/data/plugins/opencode-qoder-bridge.yaml new file mode 100644 index 0000000..0a703ec --- /dev/null +++ b/data/plugins/opencode-qoder-bridge.yaml @@ -0,0 +1,8 @@ +name: Qoder Bridge for OpenCode +repo: https://github.com/naoufalelbani/opencode-qoder-bridge +tagline: Use Qoder AI models in OpenCode via the official Qoder Agent SDK, with tools, MCP, sessions, and quota tracking. +description: OpenCode plugin that integrates Qoder AI models through the official Qoder Agent SDK. Provides dynamic model discovery, streaming, tool calling, MCP integration, multimodal input, persistent sessions, live quota visibility, and usage tracking. +kind: plugin +topics: + - providers +compat: v2 diff --git a/data/plugins/opencode-quota-board.yaml b/data/plugins/opencode-quota-board.yaml new file mode 100644 index 0000000..035c42d --- /dev/null +++ b/data/plugins/opencode-quota-board.yaml @@ -0,0 +1,10 @@ +name: Quota Board +repo: https://github.com/gilvex/opencode-quota-board +tagline: Provider quotas, reset countdowns, and credit balances in the OpenCode V2 terminal +description: V2-native quota sidebar and /quota popup using existing active provider connections. Displays remaining allowances, reset countdowns, and credit balances, with collapsible providers, persistent visibility and pinning preferences, and stale-value retention after failed refreshes. Includes adapters for OpenAI, Anthropic, OpenCode Console, OpenRouter, Z.AI, Synthetic, and MiniMax. +kind: plugin +topics: + - cost + - providers +compat: v2 +min_version: 2.0.28 diff --git a/data/plugins/opencode-quota.yaml b/data/plugins/opencode-quota.yaml index d405fbe..54c18f1 100644 --- a/data/plugins/opencode-quota.yaml +++ b/data/plugins/opencode-quota.yaml @@ -2,3 +2,8 @@ name: Opencode Quota repo: https://github.com/slkiser/opencode-quota tagline: Quota toasts and token tracking description: Track quota and token usage across providers via automatic toasts and slash commands. +kind: plugin +topics: + - cost + - notifications +compat: v2 diff --git a/data/plugins/opencode-quotes-plugin.yaml b/data/plugins/opencode-quotes-plugin.yaml index ec7b48f..f85bfcf 100644 --- a/data/plugins/opencode-quotes-plugin.yaml +++ b/data/plugins/opencode-quotes-plugin.yaml @@ -2,3 +2,7 @@ name: aerovato/opencode-quotes-plugin repo: https://github.com/aerovato/opencode-quotes-plugin tagline: Display inspirational quotes instead of tips description: Replaces the default home-page tips with inspirational quotes for a more motivating OpenCode experience. +kind: plugin +topics: + - ui +compat: v1 diff --git a/data/plugins/opencode-rag.yaml b/data/plugins/opencode-rag.yaml index 6b38733..76c2c74 100644 --- a/data/plugins/opencode-rag.yaml +++ b/data/plugins/opencode-rag.yaml @@ -1,10 +1,14 @@ name: OpenCodeRAG repo: https://github.com/MrDoe/OpenCodeRAG tagline: Local-first RAG plugin for semantic code search with tree-sitter chunking and LanceDB -description: | +description: |- A local-first Retrieval-Augmented Generation plugin for OpenCode that enables semantic code search across your workspace. Features AST-aware chunking via tree-sitter (19 languages), incremental indexing with file-change detection, watch mode for live re-indexing, and configurable embeddings via Ollama (default) or OpenAI. Includes a CLI (index, query, status, clear) and an OpenCode plugin with a chunk retrieval tool + automatic chat.message file suggestions. All processing stays local by default — no data leaves the machine. +kind: plugin +topics: + - code-intel +compat: v2 diff --git a/data/plugins/opencode-research-papers.yaml b/data/plugins/opencode-research-papers.yaml index 237c1a6..b08e964 100644 --- a/data/plugins/opencode-research-papers.yaml +++ b/data/plugins/opencode-research-papers.yaml @@ -1,4 +1,9 @@ name: Research Papers repo: https://github.com/saim-x/opencode-research-papers tagline: Search arXiv and OpenAlex for research papers with recency and citation filtering -description: OpenCode plugin that adds a research_papers tool for searching scholarly literature. Uses arXiv for fresh preprints and OpenAlex for broader metadata, citation counts, and open-access links. Supports filtering by latest, trending, or top-cited papers. \ No newline at end of file +description: OpenCode plugin that adds a research_papers tool for searching scholarly literature. Uses arXiv for fresh preprints and OpenAlex for broader metadata, citation counts, and open-access links. Supports filtering by latest, trending, or top-cited papers. +kind: plugin +topics: + - docs + - web +compat: v1 diff --git a/data/plugins/opencode-review.yaml b/data/plugins/opencode-review.yaml index 18c6161..ead79f7 100644 --- a/data/plugins/opencode-review.yaml +++ b/data/plugins/opencode-review.yaml @@ -2,3 +2,7 @@ name: opencode-review repo: https://github.com/sun-praise/opencode-review tagline: Automatic structured code review with configurable dimensions and auto-fix description: An automatic code review plugin for OpenCode CLI. Reviews staged changes when session goes idle, with configurable cooldown, multi-dimension analysis (code quality, security, performance, testing, documentation), severity levels, and auto-fix chain support. +kind: plugin +topics: + - code-quality +compat: v1 diff --git a/data/plugins/opencode-roadmap.yaml b/data/plugins/opencode-roadmap.yaml index ad886cb..e47b186 100644 --- a/data/plugins/opencode-roadmap.yaml +++ b/data/plugins/opencode-roadmap.yaml @@ -1,4 +1,8 @@ name: Opencode Roadmap -repo: https://github.com/IgorWarzocha/Opencode-Roadmap +repo: https://github.com/IgorWarzocha/opencode-planning-toolkit tagline: Strategic planning description: Strategic roadmap planning and multi-agent coordination plugin. Provides project-wide planning capabilities. +kind: plugin +topics: + - workflow +compat: v1 diff --git a/data/plugins/opencode-safety-gates.yaml b/data/plugins/opencode-safety-gates.yaml new file mode 100644 index 0000000..a1f740b --- /dev/null +++ b/data/plugins/opencode-safety-gates.yaml @@ -0,0 +1,8 @@ +name: opencode-safety-gates +repo: https://github.com/yg-codes/opencode-safety-gates +tagline: Run Claude Code bash-gate scripts inside OpenCode, deny self-revoking commands, catch fabricated CLI syntax. +description: Safety gates for OpenCode built on the V2 plugin API, with zero runtime dependencies. Wraps the built-in bash tool executor and runs your Claude Code PreToolUse/Bash gate scripts unchanged, from the same settings.json wiring — one script enforces in both tools. Ships a bundled example gate (options.exampleGates) that denies self-revoking commands — service stops that destroy the session's own access to the host (sssd, sshd, NetworkManager, firewalld, iptables flush, SSSD cache wipe). A config-driven verify-cli-syntax guard sends one corrective prompt per session when a reply recommends CLI syntax the session shows no verification for (--help, man page, or upstream source). Setup logs a health line with the active gate count, so a dead gate is never silent. +kind: plugin +topics: + - security +compat: v2 diff --git a/data/plugins/opencode-scratchpad.yaml b/data/plugins/opencode-scratchpad.yaml new file mode 100644 index 0000000..9d10bf9 --- /dev/null +++ b/data/plugins/opencode-scratchpad.yaml @@ -0,0 +1,13 @@ +name: OpenCode Scratchpad +repo: https://github.com/adikpb/opencode-scratchpad +tagline: A private per-project scratchpad you can capture and edit without leaving the TUI +description: One plain-Markdown scratchpad per project, keyed by absolute path. Append a line with `/scratch ` or open a modal editor with `/scratch`; the session sidebar shows a collapsible, read-only preview that refreshes on save. Notes live under `$OPENCODE_DATA_DIR/scratchpad` and are never written into your repo. +kind: plugin +topics: + - workflow + - ui +compat: v2 +tags: + - scratchpad + - notes + - tui diff --git a/data/plugins/opencode-seatbelt.yaml b/data/plugins/opencode-seatbelt.yaml new file mode 100644 index 0000000..1049233 --- /dev/null +++ b/data/plugins/opencode-seatbelt.yaml @@ -0,0 +1,33 @@ +name: OpenCode Seatbelt +repo: https://github.com/ssmirr/opencode-seatbelt +npm: opencode-seatbelt +tagline: macOS kernel sandbox that blocks agents from reading secrets via .ocignore +description: Applies a macOS Seatbelt profile to the OpenCode process the moment the plugin loads, so every tool and child process (read, glob, grep, the shell, MCP servers, custom tools) is confined by the kernel. Patterns from .ocignore plus a built-in secret baseline are compiled to syscall-level rules instead of being matched against command text, so "tail" instead of "cat", symlinks, hardlinks, base64 and interpreters are all covered, and rename/unlink of protected files is blocked too. Requires macOS and OpenCode v2. +kind: plugin +topics: + - security +compat: v2 +scope: + - global + - project +tags: + - security + - sandbox + - macos + - secrets +min_version: 2.0.0 +installation: | + Install from npm: + + ```sh + opencode plugin add opencode-seatbelt + ``` + + Or add it to `opencode.json(c)` yourself: + + ```jsonc + { + "$schema": "https://opencode.ai/config.json", + "plugins": ["opencode-seatbelt"] + } + ``` diff --git a/data/plugins/opencode-secret-scrubber.yaml b/data/plugins/opencode-secret-scrubber.yaml new file mode 100644 index 0000000..397e928 --- /dev/null +++ b/data/plugins/opencode-secret-scrubber.yaml @@ -0,0 +1,8 @@ +name: Secret Scrubber +repo: https://github.com/sureshr-dev/opencode-secret-redactor +tagline: Scrub secrets from the outbound LLM prompt before it reaches the provider +description: Redacts secrets from the whole outbound prompt (system, messages, tool calls, and tool results) at the V2 session hooks, so the model and provider never see them. Two detection layers - known-value matching from environment variables and an optional secrets file, plus a vendored high-signal Gitleaks pattern set. Includes local logging and sub-millisecond overhead per call. +kind: plugin +topics: + - security +compat: v2 diff --git a/data/plugins/opencode-secrets-env.yaml b/data/plugins/opencode-secrets-env.yaml new file mode 100644 index 0000000..93c5649 --- /dev/null +++ b/data/plugins/opencode-secrets-env.yaml @@ -0,0 +1,16 @@ +name: Secrets Env +repo: https://github.com/bytesnail/opencode-secrets-env +npm: opencode-secrets-env +homepage: https://www.npmjs.com/package/opencode-secrets-env +tagline: Inject secrets from a dotenv file into process.env, hot-reload, reconnect MCP servers +description: Loads secrets from ~/.config/opencode/secrets.env (dotenv format) into process.env at startup, so MCP servers ({env:NAME} references), other plugins, and OpenCode's own provider-key discovery can use them — keeping keys out of opencode.json(c) and your config safe to commit. Watches the file and hot-reloads changes in about a second, then reconnects only the MCP servers that reference a changed variable. Works with both OpenCode V1 (opencode-ai >= 1.14.34) and V2 (@opencode/cli). +kind: plugin +topics: + - security + - environment +compat: v2 +tags: + - secrets + - environment + - mcp +min_version: 1.14.34 diff --git a/data/plugins/opencode-serpapi.yaml b/data/plugins/opencode-serpapi.yaml new file mode 100644 index 0000000..5f51daa --- /dev/null +++ b/data/plugins/opencode-serpapi.yaml @@ -0,0 +1,8 @@ +name: opencode-serpapi +repo: https://github.com/serpapi/opencode-serpapi +tagline: Real-time web search for OpenCode via the SerpApi API +description: Adds a native serpapi_search tool to OpenCode, giving it real-time access to Google, Amazon, YouTube, and 100+ other search engines through SerpApi, without manual MCP configuration. +kind: plugin +topics: + - web +compat: v2 diff --git a/data/plugins/opencode-session-cost.yaml b/data/plugins/opencode-session-cost.yaml new file mode 100644 index 0000000..12913b4 --- /dev/null +++ b/data/plugins/opencode-session-cost.yaml @@ -0,0 +1,23 @@ +name: OpenCode Session Cost +repo: https://github.com/igorvelho/opencode-session-cost +tagline: Sidebar block showing true session cost including all subagents +description: |- + Subagent costs hide from you by default in OpenCode's session cost display. + This TUI plugin adds a sidebar block showing your true total — the active + session plus every subagent (task) it spawned — and lets you expand it to + see the cost of each one individually. Works for every session regardless + of model or provider, no configuration required. +kind: plugin +topics: + - cost + - ui +compat: v2 +scope: + - global +tags: + - cost + - session + - subagent + - tui + - sidebar +min_version: 1.18.0 diff --git a/data/plugins/opencode-session-time.yaml b/data/plugins/opencode-session-time.yaml new file mode 100644 index 0000000..1a942f0 --- /dev/null +++ b/data/plugins/opencode-session-time.yaml @@ -0,0 +1,9 @@ +name: Session Time +repo: https://github.com/LazyGatto/opencode-session-time +tagline: Session start / last answer timestamps and a clock +description: Adds a wall clock to the prompt footer, a "Session" block to the sidebar with the session start time and the time of the last model answer, and a /time timeline panel with every turn's timing. +kind: plugin +topics: + - sessions + - ui +compat: v2 diff --git a/data/plugins/opencode-session-tools.yaml b/data/plugins/opencode-session-tools.yaml new file mode 100644 index 0000000..f25ca45 --- /dev/null +++ b/data/plugins/opencode-session-tools.yaml @@ -0,0 +1,30 @@ +name: opencode-session-tools +repo: https://github.com/kernel-oops/opencode-session-tools +tagline: OpenCode v2 session tools – session metadata, history recall, and Claude Code-style messaging between sessions +description: Two plugins for OpenCode v2, built on the public v2 plugin API. opencode-meta adds opencode_meta (bounded session metadata, relations, statistics and tool usage) and send_message, which lets one session send plain text to another by ID or title; the target receives it as a queued message marked as coming from a peer, never as user approval. opencode-recall-lite adds recall and recall_get to search and read back earlier sessions across projects, with a short reminder to check history before answering questions about past work. +kind: plugin +topics: + - sessions + - memory +compat: v2 +scope: + - global +tags: + - sessions + - recall + - messaging + - multi-agent +min_version: 2.0.0 +installation: | + Add it to the `plugins` list in your OpenCode v2 `opencode.json`; OpenCode installs it from npm: + + ```json + { "plugins": [{ "package": "@kerneloops/opencode-session-tools" }] } + ``` + + Or copy both plugin directories into your OpenCode v2 config's `plugins/` directory: + + ```sh + git clone https://github.com/kernel-oops/opencode-session-tools + cp -r opencode-session-tools/plugins/opencode-meta opencode-session-tools/plugins/opencode-recall-lite ~/.config/opencode/plugins/ + ``` diff --git a/data/plugins/opencode-session-tracker.yaml b/data/plugins/opencode-session-tracker.yaml new file mode 100644 index 0000000..3999a25 --- /dev/null +++ b/data/plugins/opencode-session-tracker.yaml @@ -0,0 +1,10 @@ +name: OpenCode Session Tracker +repo: https://github.com/ykocaman/opencode-session-tracker +tagline: TUI sidebar extension and Telegram integration to track active sessions/subagents and interact remotely. +description: A lightweight, robust TUI sidebar extension and interactive Telegram Integration for OpenCode that brings real-time session tracking, multi-process routing, and remote monitoring directly to your terminal and phone. Monitor and drive your terminal agents remotely from your mobile device, answer interactive questions, approve or deny commands, and track status streams. +kind: plugin +topics: + - sessions + - remote + - ui +compat: v2 diff --git a/data/plugins/opencode-sessions.yaml b/data/plugins/opencode-sessions.yaml index cae8b52..07ea0ed 100644 --- a/data/plugins/opencode-sessions.yaml +++ b/data/plugins/opencode-sessions.yaml @@ -2,3 +2,7 @@ name: Opencode Sessions repo: https://github.com/malhashemi/opencode-sessions tagline: Session management description: Session management plugin for OpenCode with multi-agent collaboration support. +kind: plugin +topics: + - sessions +compat: v1 diff --git a/data/plugins/opencode-shell-magazine.yaml b/data/plugins/opencode-shell-magazine.yaml new file mode 100644 index 0000000..86c1ebc --- /dev/null +++ b/data/plugins/opencode-shell-magazine.yaml @@ -0,0 +1,10 @@ +name: Shell Magazine +repo: https://github.com/aiev/opencode-shell-magazine +tagline: Real-time shell command monitor in the TUI sidebar +description: Sidebar panel that tracks every shell command in real time. Reads the host shell registry and session.shell.* events for true status (running/exited/timeout/killed, exit code, PID, elapsed time), tails background output, backfills history from session messages, and offers kill, copy, open-output, and finish notifications. Multi-TUI safe through the host's atomic storage. +kind: plugin +topics: + - ui + - environment + - observability +compat: v2 diff --git a/data/plugins/opencode-shield-bash.yaml b/data/plugins/opencode-shield-bash.yaml new file mode 100644 index 0000000..5bdd1f2 --- /dev/null +++ b/data/plugins/opencode-shield-bash.yaml @@ -0,0 +1,10 @@ +name: opencode-shield-bash +repo: https://github.com/acramsay/opencode-shield-bash +npm: "@acramsay/opencode-shield-bash" +homepage: https://www.npmjs.com/package/@acramsay/opencode-shield-bash +tagline: Gate bash calls through an LLM judge subagent session to allow or deny their execution +description: Gate every bash tool call through a second judge session. The judge applies a fixed policy covering destructive file operations, disk/device writes, piping remote output to interpreters, privilege escalation, reverse shells, secret exfiltration, resource bombs, and system-wide installs, and returns an allow/deny verdict before the command runs. Denials surface the reason to the calling agent; verdicts are cached per root session. +kind: plugin +topics: + - security +compat: v2 diff --git a/data/plugins/opencode-short-term-memory.yaml b/data/plugins/opencode-short-term-memory.yaml index d250de6..e4abd88 100644 --- a/data/plugins/opencode-short-term-memory.yaml +++ b/data/plugins/opencode-short-term-memory.yaml @@ -2,3 +2,8 @@ name: opencode-short-term-memory repo: https://github.com/andrejtonev/opencode-short-term-memory tagline: Maintain user instructions and preferences throughout long sessions. No more repeating yourself. description: Automatically summarizes conversation context into structured session memory and injects it back into the system prompt every few turns — preserving user instructions, project context, decisions, and active references across long chats and compactions. +kind: plugin +topics: + - memory + - prompting +compat: v1 diff --git a/data/plugins/opencode-shortcuts.yaml b/data/plugins/opencode-shortcuts.yaml new file mode 100644 index 0000000..4f34b1b --- /dev/null +++ b/data/plugins/opencode-shortcuts.yaml @@ -0,0 +1,8 @@ +name: opencode-shortcuts +repo: https://github.com/PrismKitty/opencode-shortcuts +tagline: A keyboard shortcut cheatsheet and rebinder for the OpenCode v1 and v2 TUI +description: Press ctrl+/ to see every key you can use in the screen you're on, including your overrides. Rebind any built-in command in place, with clash handling and comment-preserving config edits. OpenCode v1 and v2. +kind: plugin +topics: + - ui +compat: v2 diff --git a/data/plugins/opencode-sidebar-usage.yaml b/data/plugins/opencode-sidebar-usage.yaml new file mode 100644 index 0000000..1c1103b --- /dev/null +++ b/data/plugins/opencode-sidebar-usage.yaml @@ -0,0 +1,23 @@ +name: Sidebar Usage +repo: https://github.com/HunkYuan/opencode-sidebar-usage +tagline: TUI sidebar showing per-turn and session-cumulative token usage, cache hit rate, and cost +description: |- + Adds a collapsible "Usage" block to the opencode TUI sidebar showing token + breakdown (input, output, reasoning, cache read, cache write), cache hit + percentage, context window usage, and session cost. Updates reactively as + new assistant messages arrive. +kind: plugin +topics: + - cost + - context + - ui +compat: v2 +scope: + - global +tags: + - sidebar + - tokens + - tui + - cost + - cache +min_version: 1.17.9 diff --git a/data/plugins/opencode-simple-notify.yaml b/data/plugins/opencode-simple-notify.yaml index d8f7033..105b1e6 100644 --- a/data/plugins/opencode-simple-notify.yaml +++ b/data/plugins/opencode-simple-notify.yaml @@ -2,3 +2,7 @@ name: Simple Notify repo: https://github.com/Yusuzhan/opencode-simple-notify tagline: Native desktop notifications with near-zero dependencies description: Lightweight desktop notification plugin for OpenCode. Sends native OS notifications via dbus (Linux) and osascript (macOS) when sessions complete, error, need approval, or wait for input. Shows project name, elapsed time, and message preview. +kind: plugin +topics: + - notifications +compat: v1 diff --git a/data/plugins/opencode-skills-tui.yaml b/data/plugins/opencode-skills-tui.yaml new file mode 100644 index 0000000..be39de4 --- /dev/null +++ b/data/plugins/opencode-skills-tui.yaml @@ -0,0 +1,9 @@ +name: opencode-skills-tui +repo: https://github.com/aihaipeng/opencode-skills-tui +tagline: Browse skills, track loaded state, and preview SKILL.md +description: OpenCode V2 skills sidebar with loaded-state tracking, SKILL.md previews, token estimates, and skill mentions in prompts. +kind: plugin +topics: + - ui + - prompting +compat: v2 diff --git a/data/plugins/opencode-snip.yaml b/data/plugins/opencode-snip.yaml index 364ee8f..eec9d6f 100644 --- a/data/plugins/opencode-snip.yaml +++ b/data/plugins/opencode-snip.yaml @@ -2,3 +2,8 @@ name: opencode-snip repo: https://github.com/VincentHardouin/opencode-snip tagline: OpenCode plugin that prefixes shell commands with snip to reduce LLM token consumption by 60-90% description: Automatically prefixes supported shell commands (git, go, cargo, npm, docker, etc.) with snip to filter output before it reaches your LLM context window. +kind: plugin +topics: + - context + - environment +compat: v1 diff --git a/data/plugins/opencode-snippets.yaml b/data/plugins/opencode-snippets.yaml index df96011..9bbe544 100644 --- a/data/plugins/opencode-snippets.yaml +++ b/data/plugins/opencode-snippets.yaml @@ -2,3 +2,8 @@ name: Opencode Snippets repo: https://github.com/JosXa/opencode-snippets tagline: Instant inline text expansion description: "Instant inline text expansion for OpenCode. Type #snippet anywhere in your message and watch it transform. Brings DRY principles to prompt engineering with composable, shell-enabled snippets." +kind: plugin +topics: + - prompting + - ui +compat: v2 diff --git a/data/plugins/opencode-speak-tts.yaml b/data/plugins/opencode-speak-tts.yaml new file mode 100644 index 0000000..ff46c25 --- /dev/null +++ b/data/plugins/opencode-speak-tts.yaml @@ -0,0 +1,8 @@ +name: Speak TTS +repo: https://github.com/fahrim/opencode-speak-tts +tagline: Free neural voices, no API key +description: Reads OpenCode answers aloud on Windows using Microsoft's free Edge neural voices. Condenses long answers through the model you already have connected, and falls back to the built-in Windows voice when Edge is unreachable. +kind: plugin +topics: + - voice +compat: v2 diff --git a/data/plugins/opencode-stats-pills.yaml b/data/plugins/opencode-stats-pills.yaml new file mode 100644 index 0000000..aace070 --- /dev/null +++ b/data/plugins/opencode-stats-pills.yaml @@ -0,0 +1,17 @@ +name: OpenCode Stats Pills +repo: https://github.com/Henry-916/opencode-stats-pills +tagline: Inline TUI stats bar for generation speed, tokens, cache hits, cost, and context usage +description: A compact stats bar under the OpenCode V2 input box showing streamed output speed (tok/s), average TTFT, token usage with cache hits and reasoning, session cost, and context-window usage, without opening the sidebar. Click any pill for a detail panel. Context usage follows OpenCode's own calculation, custom per-model prices are supported, and parent and subagent sessions are tracked separately. Tested on OpenCode 2.0.29; UI text is currently in Chinese. +kind: plugin +topics: + - context + - cost + - ui +compat: v2 +scope: + - global +tags: + - tui + - tokens + - cost + - statistics diff --git a/data/plugins/opencode-status-popup.yaml b/data/plugins/opencode-status-popup.yaml new file mode 100644 index 0000000..67778c9 --- /dev/null +++ b/data/plugins/opencode-status-popup.yaml @@ -0,0 +1,20 @@ +name: Opencode Status Popup +repo: https://github.com/LucasInstra/opencode-status-popup +npm: opencode-status-popup +tagline: Always-on-top status pill or tray icon that shows what the agent is doing (Windows) +description: A second screen for your agent. While a session is thinking, a small always-on-top pill types the word out letter by letter, or a tray icon draws the letter o pixel by pixel. It turns amber on provider retries, red when an execution fails, and violet when OpenCode is waiting for a permission, so you can be in another window and still notice. One PowerShell host starts on demand and is shared by every instance, and the renderer can be switched at runtime with the /popup-* commands or a tool. +kind: plugin +topics: + - notifications + - ui +compat: v2 +scope: + - global + - project +tags: + - windows + - notifications + - status + - tray +min_version: 2.0.0 +installation: opencode plugin add opencode-status-popup diff --git a/data/plugins/opencode-swarm.yaml b/data/plugins/opencode-swarm.yaml index ae635a1..1a03002 100644 --- a/data/plugins/opencode-swarm.yaml +++ b/data/plugins/opencode-swarm.yaml @@ -1,4 +1,9 @@ name: OpenCode Swarm -repo: https://github.com/zaxbysauce/opencode-swarm +repo: https://github.com/ZaxbyHub/opencode-swarm tagline: Verification-gated swarm with architect, review, test, and security agents description: Verification-gated OpenCode swarm with architect planning, independent review, test engineering, security checks, and resumable evidence. +kind: plugin +topics: + - orchestration + - code-quality +compat: v2 diff --git a/data/plugins/opencode-synced.yaml b/data/plugins/opencode-synced.yaml index 527b44a..0e0e02c 100644 --- a/data/plugins/opencode-synced.yaml +++ b/data/plugins/opencode-synced.yaml @@ -2,3 +2,7 @@ name: Opencode Synced repo: https://github.com/iHildy/opencode-synced tagline: Sync configs across machines description: Enables syncing global opencode configurations across machines with public/private visibility options. +kind: plugin +topics: + - environment +compat: v2 diff --git a/data/plugins/opencode-system-prompt-logger.yaml b/data/plugins/opencode-system-prompt-logger.yaml index 6870030..75ccfb8 100644 --- a/data/plugins/opencode-system-prompt-logger.yaml +++ b/data/plugins/opencode-system-prompt-logger.yaml @@ -2,3 +2,8 @@ name: System Prompt Logger repo: https://github.com/tlinhart/opencode-system-prompt-logger tagline: System prompt logger description: OpenCode plugin that intercepts the system prompt before it's sent to the LLM and logs it. +kind: plugin +topics: + - observability + - prompting +compat: v1 diff --git a/data/plugins/opencode-tasksmd.yaml b/data/plugins/opencode-tasksmd.yaml new file mode 100644 index 0000000..997774f --- /dev/null +++ b/data/plugins/opencode-tasksmd.yaml @@ -0,0 +1,28 @@ +name: OpenCode TasksMD +repo: https://github.com/LeonardMeagher2/tasksmd +npm: "@leonardmeagher2/opencode-tasksmd" +homepage: https://www.npmjs.com/package/@leonardmeagher2/opencode-tasksmd +tagline: Background task queue for OpenCode projects, powered by TASKS.md +description: Background task queue that reads TASKS.md — schedules recurring work, sets per-task permissions and agents, and persists state across restarts. +kind: plugin +topics: + - orchestration + - workflow +compat: v1 +scope: + - global + - project +tags: + - tasks + - scheduling + - background + - queue + - automation +installation: | + Add the package to your OpenCode config: + + ```json + { + "plugin": ["@leonardmeagher2/opencode-tasksmd"] + } + ``` diff --git a/data/plugins/opencode-teamwork.yaml b/data/plugins/opencode-teamwork.yaml new file mode 100644 index 0000000..6898a8c --- /dev/null +++ b/data/plugins/opencode-teamwork.yaml @@ -0,0 +1,30 @@ +name: OpenCode Teamwork +repo: https://github.com/sorcnr/opencode-teamwork-v2 +npm: opencode-teamwork-v2 +homepage: https://www.npmjs.com/package/opencode-teamwork-v2 +tagline: Antigravity-style multi-agent orchestration with verification loops +description: Brings the Antigravity-style Teamwork orchestration model to OpenCode V2, where a Sentinel coordinator dispatches a DAG of specialist agents and a verifier gates every task until it passes. Ships 10 agents (Sentinel, Orchestrator, Crafter, Scout, Worker, Proof Worker, Proposer, Falsifier, Synthesizer, Verifier), 7 slash commands, per-agent git worktrees, cost tracking, and a 9-step prompt-crafting wizard. +kind: plugin +topics: + - orchestration + - workflow +compat: v2 +scope: + - global +tags: + - agents + - multi-agent + - orchestration + - worktrees + - verification + - commands +min_version: 2.0.0 +installation: | + Install the plugin and choose a model for each agent: + + ```sh + opencode plugin add opencode-teamwork-v2 + npx opencode-teamwork-v2 init + ``` + + Or install straight from GitHub: `opencode plugin add github:sorcnr/opencode-teamwork-v2` diff --git a/data/plugins/opencode-telemetry.yaml b/data/plugins/opencode-telemetry.yaml index 0a0cca3..23b51d6 100644 --- a/data/plugins/opencode-telemetry.yaml +++ b/data/plugins/opencode-telemetry.yaml @@ -1,7 +1,12 @@ name: Opencode Telemetry -repo: https://github.com/agostinilabsrl/opencode-telemetry +repo: https://github.com/xrmghost-maintainer/opencode-telemetry tagline: Passive cross-session telemetry to local SQLite; cost rollups across agent orchestration chains description: Logs every opencode session to a local SQLite database automatically — tokens, tool calls, skills, per-turn cost. Aggregates costs across orchestration chains (conductor + child sessions), offers turn-by-turn forensic inspection, and ships an `octm` CLI for reports without spending model tokens. Zero cloud, zero network, no message bodies stored. +kind: plugin +topics: + - observability + - cost +compat: v1 scope: - global tags: diff --git a/data/plugins/opencode-tg.yaml b/data/plugins/opencode-tg.yaml new file mode 100644 index 0000000..7195cd4 --- /dev/null +++ b/data/plugins/opencode-tg.yaml @@ -0,0 +1,37 @@ +name: opencode-tg +repo: https://github.com/par4987/opencode-tg +homepage: https://github.com/par4987/opencode-tg#readme +tagline: Control OpenCode from Telegram — every session gets its own thread +description: "Runs inside the OpenCode server as a plugin (zero runtime dependencies) and mirrors every session into a Telegram chat: each session and subagent gets its own thread, and writing in the thread is prompting the agent. Answer the agent's questions and approve permissions with a tap, run shell commands in the session (a three-tier guard passes read-only commands, asks for confirmation on service-breaking ones, and blocks the irreversible), browse and attach project files, schedule tasks, switch models and agents, watch CI runs, and steer the message queue mid-turn. Optional extras: multi-bot topologies (one bot per project or per session), local whisper.cpp voice transcription, and a dead-prompt watchdog that reports the real cause when a turn never starts." +kind: plugin +topics: + - remote + - notifications +compat: v2 +scope: + - global + - project +tags: + - telegram + - notifications + - mobile + - i18n + - voice +min_version: 2.0.15 +installation: | + Register the plugin in your OpenCode config (`opencode.jsonc`) pointing at the directory: + + ```jsonc + "plugins": [ + { "package": "C:/path/to/opencode-tg" } + ] + ``` + + Create `~/.opencode/tg/.env` (never committed to the repo): + + ``` + TELEGRAM_BOT_TOKEN=123456:ABC... + ALLOWED_USERS=123456789 + ``` + + Start in `dry` mode to validate without touching Telegram, then switch `mode` to `live` in the plugin's `config.json`. The interface ships in 12 languages (Spanish, English, Portuguese, German, French, Italian, Indonesian, Russian, Turkish, Chinese, Korean, Arabic) switchable from the phone with `/locale`. Tested against OpenCode 2.0.15–2.0.22. diff --git a/data/plugins/opencode-throughput.yaml b/data/plugins/opencode-throughput.yaml index 4e83ab2..2183e7a 100644 --- a/data/plugins/opencode-throughput.yaml +++ b/data/plugins/opencode-throughput.yaml @@ -2,3 +2,7 @@ name: OpenCode Throughput repo: https://github.com/Howardzhangdqs/opencode-throughput tagline: Real-time LLM performance monitoring description: Real-time LLM performance monitoring plugin for OpenCode. Tracks TTFT, TPS, latency, token usage, and cost per model with toast notifications and a TUI sidebar display. +kind: plugin +topics: + - observability +compat: v1 diff --git a/data/plugins/opencode-todo-supervisor.yaml b/data/plugins/opencode-todo-supervisor.yaml new file mode 100644 index 0000000..a44a360 --- /dev/null +++ b/data/plugins/opencode-todo-supervisor.yaml @@ -0,0 +1,63 @@ +name: OpenCode Todo Supervisor +repo: https://github.com/N0K0/opencode-todo-supervisor +npm: "@hacky.software/opencode-todo-supervisor" +tagline: Session todo lists, plus a supervisor that keeps nudging idle sessions until the list is done +description: Gives every OpenCode V2 session a real todo list and then keeps the agent working on it. Ships todo_write, todo_read, todo_add and todo_remove tools (V2 ships none), stored per session with stable per-item ids, with a live progress strip in the composer. A supervisor re-prompts any session that goes idle while its list still has open items, and stays quiet while the agent is actually working, including during tool calls, subagent runs and background shells. Any markdown file can be subscribed so its GFM checklists count as todos, and the TUI panel can tick them off by hand. Nudges are delivered as synthetic session input, so the model reads them as ordinary instructions. Tested against 2.0.24. +kind: plugin +topics: + - workflow + - ui +compat: v2 +scope: + - global + - project +tags: + - todo + - task-tracking + - productivity + - automation + - tui +min_version: 2.0.0 +installation: | + ## Install + + ```sh + opencode plugin add @hacky.software/opencode-todo-supervisor + ``` + + Or list it in `opencode.json`: + + ```json + { + "$schema": "https://opencode.ai/config.json", + "plugins": ["@hacky.software/opencode-todo-supervisor"] + } + ``` + + ## Configuration + + Options are optional; the defaults supervise quietly in the background. + + ```jsonc + { + "$schema": "https://opencode.ai/config.json", + "plugins": [ + { + "package": "@hacky.software/opencode-todo-supervisor", + "options": { + "stallMinutes": 5, // idle time before the first nudge + "minNudgeIntervalMs": 45000, // rate limit between nudges + "maxNoProgressNudges": 5, // give up after this many no-progress nudges + "injectTodoContext": true, // remind the model of the list on each prompt + "markdownFiles": ["PLAN.md"] // treat these files' checklists as the todo list + } + } + ] + } + ``` + + ## Usage + + Ask the agent to plan with `todo_write`, then check `todo_read`. In the TUI the composer + strip shows progress; open the panel from the command palette to add, remove or reorder + items, and to check off markdown checklist items. diff --git a/data/plugins/opencode-todolist.yaml b/data/plugins/opencode-todolist.yaml new file mode 100644 index 0000000..6c2b6d1 --- /dev/null +++ b/data/plugins/opencode-todolist.yaml @@ -0,0 +1,9 @@ +name: Todolist +repo: https://github.com/aiev/opencode-todolist +tagline: Restores todowrite/todoread with a sidebar todo strip +description: Brings back the V1 session todo tools as a server plugin. Lists are stored per session and a compact summary of open tasks is injected into the model context on every request, so the agent keeps track across long conversations and context compaction. +kind: plugin +topics: + - workflow + - ui +compat: v2 diff --git a/data/plugins/opencode-token-tracker.yaml b/data/plugins/opencode-token-tracker.yaml index b96aa43..4375ae2 100644 --- a/data/plugins/opencode-token-tracker.yaml +++ b/data/plugins/opencode-token-tracker.yaml @@ -2,3 +2,8 @@ name: OpenCode Token Tracker repo: https://github.com/eserete/opencode-token-tracker tagline: Real-time token usage, cost, and latency tracking for every AI request in OpenCode description: Displays a toast after each AI response with input/output tokens, cache hits, reasoning tokens, response latency, per-message cost, cumulative session cost, model identifier, and request count. Automatically aggregates tokens from subagent sessions spawned via the Task tool. Zero config — drop the file in and it works. +kind: plugin +topics: + - cost + - observability +compat: v1 diff --git a/data/plugins/opencode-topics.yaml b/data/plugins/opencode-topics.yaml new file mode 100644 index 0000000..7fe1f24 --- /dev/null +++ b/data/plugins/opencode-topics.yaml @@ -0,0 +1,8 @@ +name: OpenCode Topics +repo: https://github.com/m-uvex/opencode-topics +tagline: Smart, zero-token session re-titling that tracks topic drift +description: Tracks topic drift across conversation turns and dynamically re-titles OpenCode sessions when the topic shifts, using zero-token local checks between assistant turns. +kind: plugin +topics: + - sessions +compat: v2 diff --git a/data/plugins/opencode-trace-ljw1004.yaml b/data/plugins/opencode-trace-ljw1004.yaml new file mode 100644 index 0000000..9a87efc --- /dev/null +++ b/data/plugins/opencode-trace-ljw1004.yaml @@ -0,0 +1,16 @@ +name: opencode-trace +repo: https://github.com/ljw1004/opencode-trace +tagline: Capture raw json LLM requests+responses as jsonl traces, with interactive HTML viewer +description: OpenCode plugin that logs raw provider request and response payloads to ~/opencode-trace as self-contained HTML files with an interactive viewer for debugging and inspection. +kind: plugin +topics: + - observability +compat: v2 +scope: + - global +tags: + - tracing + - debugging + - observability +installation: | + Add `"@ljw1004/opencode-trace"` to the `plugin` array in `~/.config/opencode/opencode.json`. diff --git a/data/plugins/opencode-trace.yaml b/data/plugins/opencode-trace.yaml new file mode 100644 index 0000000..3625d5e --- /dev/null +++ b/data/plugins/opencode-trace.yaml @@ -0,0 +1,9 @@ +name: opencode-trace +repo: https://github.com/aixmoyu/opencode-trace +tagline: Automatic tracing, visualization, and replay for OpenCode AI conversations with token and latency metrics +description: A comprehensive tool suite that automatically records every interaction between OpenCode and AI Providers (OpenAI, Anthropic), including complete request/response payloads, token usage, and latency metrics. Features a real-time Web Viewer for conversation history and statistics, per-session tracing control via slash commands and agent tools, CLI for export/query, and support for both global and project-level storage. +kind: plugin +topics: + - observability + - sessions +compat: v1 diff --git a/data/plugins/opencode-tts.yaml b/data/plugins/opencode-tts.yaml index 1a50227..0f69caf 100644 --- a/data/plugins/opencode-tts.yaml +++ b/data/plugins/opencode-tts.yaml @@ -2,3 +2,7 @@ name: Opencode TTS repo: https://github.com/StefanoChiodino/opencode-tts tagline: Voice summaries for idle responses description: Speaks assistant responses aloud when a session goes idle, with summary or full-text modes and local TTS backends. +kind: plugin +topics: + - voice +compat: v1 diff --git a/data/plugins/opencode-update-notifier.yaml b/data/plugins/opencode-update-notifier.yaml index c441232..ef34e9c 100644 --- a/data/plugins/opencode-update-notifier.yaml +++ b/data/plugins/opencode-update-notifier.yaml @@ -2,3 +2,7 @@ name: Opencode update notifier repo: https://github.com/tim-hilde/opencode-update-notifier tagline: Notify about plugin updates. description: Checks if your pinned plugins have newer versions available and shows a notification. +kind: plugin +topics: + - notifications +compat: v2 diff --git a/data/plugins/opencode-usage-bar.yaml b/data/plugins/opencode-usage-bar.yaml new file mode 100644 index 0000000..a9ea8f6 --- /dev/null +++ b/data/plugins/opencode-usage-bar.yaml @@ -0,0 +1,10 @@ +name: Opencode Usage Bar +repo: https://github.com/satas20/opencode-usage-bar +tagline: Lightweight, configurable usage gauge with provider status alerts for the OpenCode TUI. +description: A minimal usage bar that shows how much of your coding-plan quota you've used and how long until it resets, in a full-width row below the session footer. Supports Claude Pro/Max and ChatGPT Plus/Pro (Codex), each toggleable per window (5h session, 7d weekly, per-model) via a simple TOML config, so you show only the bars you care about. Color-coded mini-bars escalate green/amber/red with usage, countdowns tick live, and last known values are cached so the bar appears instantly on restart. It also watches each vendor's public status page and prepends a color-coded "!" marker when there's an active incident — so you know it's them, not you. No slash commands, no sidebar, no token bookkeeping, just a lightweight always-visible gauge. Credentials are read-only from the vendors' own CLI logins or OpenCode's auth store. Installable via npm (@satas/opencode-usage-bar). +kind: plugin +topics: + - cost + - providers + - ui +compat: v2 diff --git a/data/plugins/opencode-usage-monitor.yaml b/data/plugins/opencode-usage-monitor.yaml index 16e8df9..05d2073 100644 --- a/data/plugins/opencode-usage-monitor.yaml +++ b/data/plugins/opencode-usage-monitor.yaml @@ -2,3 +2,8 @@ name: Opencode Usage Monitor repo: https://github.com/Mark1708/opencode-usage-monitor tagline: Monitor OpenAI and Z.AI usage quotas in the TUI description: OpenCode sidebar plugin that displays API usage quotas for OpenAI and Z.AI providers with per-model breakdowns, spend tracking, and configurable refresh controls. +kind: plugin +topics: + - cost + - ui +compat: v1 diff --git a/data/plugins/opencode-vision-kelphect.yaml b/data/plugins/opencode-vision-kelphect.yaml new file mode 100644 index 0000000..470212f --- /dev/null +++ b/data/plugins/opencode-vision-kelphect.yaml @@ -0,0 +1,21 @@ +name: Vision +repo: https://github.com/KelpHect/opencode-vision +tagline: Screen recording and video analysis tools (record_screen, watch_video, video_frames) +description: "Gives OpenCode agents eyes: record the full screen or a single window with ffmpeg, send clips to a video-capable model for timestamped Q&A, or turn videos into timestamped contact sheets for image-only vision models. Windows-focused, with a bundled video-analysis skill." +kind: plugin +topics: + - media +compat: v2 +scope: + - global + - project +tags: + - vision + - tools +min_version: 2.0.0 +installation: | + ```bash + opencode plugin add github:KelpHect/opencode-vision + ``` + Requires `ffmpeg` and `ffprobe` on PATH. Pin a release with + `github:KelpHect/opencode-vision#v0.2.1`. diff --git a/data/plugins/opencode-vision.yaml b/data/plugins/opencode-vision.yaml new file mode 100644 index 0000000..951a5dc --- /dev/null +++ b/data/plugins/opencode-vision.yaml @@ -0,0 +1,8 @@ +name: OpenCode Vision +repo: https://github.com/venespana/opencode-vision +tagline: Give text-only OpenCode models the ability to see images +description: Intercepts images pasted into chat, routes them through a configurable vision backend (an MCP server or a local CLI like MiniMax mmx), and injects the resulting text description back into the conversation so non-vision models can reason about images. Ships no vision of its own — you provide the backend, it provides the wiring. +kind: plugin +topics: + - media +compat: v2 diff --git a/data/plugins/opencode-visualizer.yaml b/data/plugins/opencode-visualizer.yaml index 82f5844..4206433 100644 --- a/data/plugins/opencode-visualizer.yaml +++ b/data/plugins/opencode-visualizer.yaml @@ -2,3 +2,8 @@ name: Opencode Visualizer repo: https://github.com/psinetron/opencode-visualiser tagline: 2D pixel-art office for AI agents description: Turning raw OpenCode terminal logs into cozy 2D pixel office chaos. Watch your agents work, idle, and celebrate success in a bustling virtual office. +kind: plugin +topics: + - ui + - orchestration +compat: v1 diff --git a/data/plugins/opencode-vitals.yaml b/data/plugins/opencode-vitals.yaml new file mode 100644 index 0000000..d76dd8a --- /dev/null +++ b/data/plugins/opencode-vitals.yaml @@ -0,0 +1,9 @@ +name: OpenCode Vitals +repo: https://github.com/moutazideal/opencode-vitals +tagline: Turns, steps and streaming tok/s in a small always-on-top bar +description: A desktop bar for the session you are working in - turns, steps, and average streaming tokens per second, measured as generated tokens over active stream time so tool waiting stays out of the denominator. One-command install with no configuration file edit and no network calls; standard-library Python only, built for OpenCode V2. +kind: plugin +topics: + - observability + - ui +compat: v2 diff --git a/data/plugins/opencode-web-voice-plugin.yaml b/data/plugins/opencode-web-voice-plugin.yaml new file mode 100644 index 0000000..2d86d64 --- /dev/null +++ b/data/plugins/opencode-web-voice-plugin.yaml @@ -0,0 +1,8 @@ +name: OpenCode Web Voice Plugin +repo: https://github.com/Flickwire-Agent/opencode-web-voice-plugin +tagline: Voice input for OpenCode Web through Lens +description: Adds a microphone button to the OpenCode Web prompt composer using the Web Speech API. Record speech, insert transcripts directly into the prompt editor, and send naturally. Requires Lens to load. +kind: plugin +topics: + - voice +compat: v2 diff --git a/data/plugins/opencode-workaholic.yaml b/data/plugins/opencode-workaholic.yaml index b6f5dbf..b560de8 100644 --- a/data/plugins/opencode-workaholic.yaml +++ b/data/plugins/opencode-workaholic.yaml @@ -1,7 +1,11 @@ name: OpenCode Workaholic repo: https://github.com/RoderickQiu/opencode-workaholic tagline: Enforce mandatory working time and prevents premature "done" responses -description: | +description: |- - AI has an early-exit problem: it says "done" at 30 seconds while edge cases are untested, bugs remain, and docs are missing. - Workaholic enforces mandatory working time for AI until the timer hits zero. - - Blocks premature "done" responses until timer expire, and require AI to call checkout() to end the task. \ No newline at end of file + - Blocks premature "done" responses until timer expire, and require AI to call checkout() to end the task. +kind: plugin +topics: + - workflow +compat: v1 diff --git a/data/plugins/opencode-workflows.yaml b/data/plugins/opencode-workflows.yaml new file mode 100644 index 0000000..b4e5454 --- /dev/null +++ b/data/plugins/opencode-workflows.yaml @@ -0,0 +1,20 @@ +name: opencode-workflows +repo: https://github.com/rphang/opencode-workflows +npm: "@rphang/opencode-workflows" +tagline: Claude Code-style dynamic workflows for opencode v2 — a JS script fans work out to parallel subagents +description: A native opencode v2 plugin that reproduces Claude Code's dynamic workflows. The model writes a small JavaScript orchestration script (agent, parallel, pipeline, phase, budget, nested workflows) that runs in a sandboxed interpreter in the background, fans work out to subagents as child sessions, and can resume from its journal. Includes a live TUI tree to watch, steer, or stop running agents. Uses your configured opencode models; no extra daemon. +kind: plugin +topics: + - orchestration + - workflow + - prompting +compat: v2 +tags: + - workflows + - subagents + - orchestration +min_version: 2.0.15 +installation: | + ```sh + opencode plugin add @rphang/opencode-workflows + ``` diff --git a/data/plugins/opencode-workspace.yaml b/data/plugins/opencode-workspace.yaml index 801f218..23bf8f9 100644 --- a/data/plugins/opencode-workspace.yaml +++ b/data/plugins/opencode-workspace.yaml @@ -2,3 +2,7 @@ name: Opencode Workspace repo: https://github.com/kdcokenny/opencode-workspace tagline: Multi-agent orchestration description: Bundled multi-agent orchestration harness with 16 components in one install. +kind: plugin +topics: + - orchestration +compat: v1 diff --git a/data/plugins/opencode-worktree.yaml b/data/plugins/opencode-worktree.yaml index 9c20a3b..0500b28 100644 --- a/data/plugins/opencode-worktree.yaml +++ b/data/plugins/opencode-worktree.yaml @@ -2,3 +2,7 @@ name: Opencode Worktree repo: https://github.com/kdcokenny/opencode-worktree tagline: Zero-friction git worktrees description: Zero-friction git worktrees for OpenCode. Auto-spawns terminals, syncs files, cleans up on exit. +kind: plugin +topics: + - git +compat: v1 diff --git a/data/plugins/opencode-worktrees.yaml b/data/plugins/opencode-worktrees.yaml new file mode 100644 index 0000000..488d6bf --- /dev/null +++ b/data/plugins/opencode-worktrees.yaml @@ -0,0 +1,23 @@ +name: Worktrees +repo: https://github.com/KelpHect/opencode-worktrees +tagline: Run subagents in isolated git worktrees so parallel editors never collide +description: Selected agents (default `worker`) each get their own git worktree branched from the default branch, with file copies via .worktreeinclude, automatic cleanup of unchanged worktrees, and enforcement against edits to the main checkout. Includes a bundled worktree-isolation skill. +kind: plugin +topics: + - git + - orchestration +compat: v2 +scope: + - global + - project +tags: + - worktrees + - agents + - orchestration +min_version: 2.0.0 +installation: | + ```bash + opencode plugin add github:KelpHect/opencode-worktrees + ``` + Requires `git`. Pin a release with + `github:KelpHect/opencode-worktrees#v0.2.2`. diff --git a/data/plugins/opencode-zellij-indicator.yaml b/data/plugins/opencode-zellij-indicator.yaml new file mode 100644 index 0000000..72248c6 --- /dev/null +++ b/data/plugins/opencode-zellij-indicator.yaml @@ -0,0 +1,15 @@ +name: OpenCode Zellij Indicator +repo: https://github.com/aidan-gallagher/opencode-zellij-indicator +tagline: Show each OpenCode session's status and title on its Zellij tab +description: Puts a status icon (working, needs-you, done-unseen, done-seen) and the session title on each Zellij tab, so you can see at a glance which of your parallel OpenCode agents is busy, blocked on a prompt, or finished — without switching tabs. Includes an optional stopwatch and sound notifications. +kind: plugin +topics: + - environment + - notifications +compat: v2 +tags: + - zellij + - terminal + - status + - notifications + - tabs diff --git a/data/plugins/opencode2-shell-tasks.yaml b/data/plugins/opencode2-shell-tasks.yaml new file mode 100644 index 0000000..9c8110f --- /dev/null +++ b/data/plugins/opencode2-shell-tasks.yaml @@ -0,0 +1,9 @@ +name: OpenCode 2 Shell Tasks +repo: https://github.com/madcpt/opencode2-shell-tasks +tagline: Claude Code-style background shell jobs for OpenCode 2 (V2 plugin API) +description: "Run long commands without blocking the current turn: detached processes that return a task ID immediately, combined stdout/stderr logs with bounded tails, exit-code reconciliation after a restart, process-group kill, and a native /tasks TUI panel. Built on the OpenCode 2 V2 plugin API." +kind: plugin +topics: + - environment + - orchestration +compat: v2 diff --git a/data/plugins/opencodemirror.yaml b/data/plugins/opencodemirror.yaml new file mode 100644 index 0000000..801f03b --- /dev/null +++ b/data/plugins/opencodemirror.yaml @@ -0,0 +1,9 @@ +name: OpenCodeMirror +repo: https://github.com/iceberghbs/OpenCodeMirror +tagline: Bridge OpenCode sessions to chat platforms from your phone +description: Native OpenCode plugin that mirrors session output to Telegram and lets you approve permissions, answer questions, and send prompts from chat. Runs inside the OpenCode process with no separate server. +kind: plugin +topics: + - remote + - sessions +compat: v1 diff --git a/data/plugins/openhax-codex.yaml b/data/plugins/openhax-codex.yaml index 1c58f16..dca8ba5 100644 --- a/data/plugins/openhax-codex.yaml +++ b/data/plugins/openhax-codex.yaml @@ -2,3 +2,7 @@ name: OpenHax Codex repo: https://github.com/open-hax/codex tagline: OAuth authentication description: OAuth authentication plugin for personal coding assistance with ChatGPT Plus/Pro subscriptions. +kind: plugin +topics: + - providers +compat: v1 diff --git a/data/plugins/openskills.yaml b/data/plugins/openskills.yaml index 2ea567b..8cacc69 100644 --- a/data/plugins/openskills.yaml +++ b/data/plugins/openskills.yaml @@ -2,3 +2,7 @@ name: Openskills repo: https://github.com/numman-ali/openskills tagline: Alternative skills manager description: Alternative skills management plugin for opencode with enhanced features. +kind: plugin +topics: + - prompting +compat: unknown diff --git a/data/plugins/optimal-model-temps.yaml b/data/plugins/optimal-model-temps.yaml index 2b91661..6e8e979 100644 --- a/data/plugins/optimal-model-temps.yaml +++ b/data/plugins/optimal-model-temps.yaml @@ -2,3 +2,7 @@ name: Optimal Model Temps repo: https://github.com/Lyapsus/opencode-optimal-model-temps tagline: Optimal sampling temperatures description: Minimal plugin that nudges specific models to their preferred sampling temperature. +kind: plugin +topics: + - providers +compat: v1 diff --git a/data/plugins/orgx-opencode-plugin.yaml b/data/plugins/orgx-opencode-plugin.yaml index 028a9c5..4efab54 100644 --- a/data/plugins/orgx-opencode-plugin.yaml +++ b/data/plugins/orgx-opencode-plugin.yaml @@ -1,7 +1,13 @@ name: OrgX OpenCode Plugin repo: https://github.com/useorgx/orgx-opencode-plugin +homepage: https://github.com/useorgx/orgx-opencode-plugin#readme tagline: OrgX Work Graph peer for task dispatch, receipts, deviations, and passive reconciliation description: OrgX OpenCode Plugin connects OpenCode sessions to the OrgX execution control plane. It receives OrgX task dispatches, drives the user's local OpenCode session, posts execution receipts and deviations back to OrgX, and writes compact Work Graph events for later audit-first reconciliation. +kind: plugin +topics: + - orchestration + - integrations +compat: v1 scope: - global tags: @@ -10,4 +16,3 @@ tags: - task-dispatch - receipts - mcp -homepage: https://github.com/useorgx/orgx-opencode-plugin#readme diff --git a/data/plugins/pilot.yaml b/data/plugins/pilot.yaml index 4fa2a3e..021355c 100644 --- a/data/plugins/pilot.yaml +++ b/data/plugins/pilot.yaml @@ -2,3 +2,8 @@ name: Pilot repo: https://github.com/athal7/opencode-pilot tagline: Automation daemon description: Automation daemon that polls for work from GitHub issues and Linear tickets. +kind: plugin +topics: + - integrations + - workflow +compat: unknown diff --git a/data/plugins/plain.yaml b/data/plugins/plain.yaml new file mode 100644 index 0000000..6c6aeb1 --- /dev/null +++ b/data/plugins/plain.yaml @@ -0,0 +1,8 @@ +name: Plain +repo: https://github.com/rubenxyz/opencode-plain-english +tagline: "Plain-English replies: everyday words, no jargon, no code in explanations" +description: Puts the assistant into plain-English mode. While active, a short ruleset is injected into the system prompt so it explains its work in everyday words and full sentences, with no jargon or acronyms and no code in explanations. On by default in every session; /plain toggles it, with /plain-commit and /plain-review commands for commits and diffs. Small, dependency-free, inspired by caveman - inverted. +kind: plugin +topics: + - prompting +compat: v2 diff --git a/data/plugins/plannotator.yaml b/data/plugins/plannotator.yaml index 5b476dc..b998135 100644 --- a/data/plugins/plannotator.yaml +++ b/data/plugins/plannotator.yaml @@ -2,3 +2,8 @@ name: Plannotator repo: https://github.com/backnotprop/plannotator tagline: Interactive plan review UI description: Plan review UI with visual annotation, private/offline sharing, and Obsidian/Bear integration. +kind: plugin +topics: + - workflow + - ui +compat: v1 diff --git a/data/plugins/plugin-template.yaml b/data/plugins/plugin-template.yaml index d662b0a..1bd2863 100644 --- a/data/plugins/plugin-template.yaml +++ b/data/plugins/plugin-template.yaml @@ -2,3 +2,7 @@ name: Plugin Template repo: https://github.com/zenobi-us/opencode-plugin-template tagline: CICD setup for plugins description: Focuses on providing the CICD setup with generator script, release please, bun publish, npm trusted publishing, and mise tasks. +kind: plugin +topics: + - docs +compat: v1 diff --git a/data/plugins/pocket-universe.yaml b/data/plugins/pocket-universe.yaml index 7d30440..a036554 100644 --- a/data/plugins/pocket-universe.yaml +++ b/data/plugins/pocket-universe.yaml @@ -2,3 +2,7 @@ name: Pocket Universe repo: https://github.com/spoons-and-mirrors/pocket-universe tagline: A subagent driven pocket universe for your primary agent description: Async agents can be powerful, but orchestration is at best finicky; they fire and forget, orphan work, lose context, waste time... and tokens. This plugin extends the native opencode subagent paradigm to provide closed loop, resilient, async agents, blocking main thread execution. A "pocket universe". This ships with three tools creating a robust system for parallel subagents to communicate and coordinate work +kind: plugin +topics: + - orchestration +compat: v1 diff --git a/data/plugins/ralph-wiggum.yaml b/data/plugins/ralph-wiggum.yaml index 56a30a4..32e0ed0 100644 --- a/data/plugins/ralph-wiggum.yaml +++ b/data/plugins/ralph-wiggum.yaml @@ -1,4 +1,8 @@ name: Ralph Wiggum -repo: https://github.com/Th0rgal/opencode-ralph-wiggum +repo: https://github.com/Th0rgal/open-ralph-wiggum tagline: Self-correcting agent loops description: Iterative AI development loops with self-correcting agents based on the Ralph Wiggum technique. +kind: plugin +topics: + - workflow +compat: unknown diff --git a/data/plugins/rehydra.yaml b/data/plugins/rehydra.yaml new file mode 100644 index 0000000..7e5e69d --- /dev/null +++ b/data/plugins/rehydra.yaml @@ -0,0 +1,9 @@ +name: Rehydra +repo: https://github.com/rehydra-ai/rehydra-sdk +tagline: Prevent your coding agent from leaking secrets to LLM providers +description: Intercepts the conversation between OpenCode and the LLM, replacing secrets from .env files and detected API keys, tokens, and credentials with placeholders before they leave your machine. Secrets are transparently restored before any tool executes locally. Supports pattern-based detection for Stripe, OpenAI, AWS, GitHub, Slack, and more. +kind: plugin +topics: + - providers + - security +compat: v2 diff --git a/data/plugins/ring-a-bell-example.yaml b/data/plugins/ring-a-bell-example.yaml index 07e84b8..e88ed24 100644 --- a/data/plugins/ring-a-bell-example.yaml +++ b/data/plugins/ring-a-bell-example.yaml @@ -2,3 +2,8 @@ name: Ring a Bell Example repo: https://gist.github.com/ahosker/267f375a65378bcb9a867fd9a195db1e tagline: Simple terminal bell plugin description: A simple plugin to ring the terminal bell once a request is complete. +kind: plugin +topics: + - notifications + - environment +compat: v1 diff --git a/data/plugins/semantic-anchors.yaml b/data/plugins/semantic-anchors.yaml index f109050..70e56ab 100644 --- a/data/plugins/semantic-anchors.yaml +++ b/data/plugins/semantic-anchors.yaml @@ -2,3 +2,8 @@ name: Semantic Anchors repo: https://github.com/JensGrote/opencode-semantic-anchors tagline: Runtime contract enforcement for safe, traceable AI agents description: Runtime steering plugin that enforces behavioral contracts via plugin hooks. Monitors chat messages and tool calls against configurable rules, supports BLOCK/WARN modes, built-in profiles (socratic, architecture), step confirmation intervals, override mechanism, dynamic role switching, and Zod-validated YAML configuration. +kind: plugin +topics: + - code-quality + - observability +compat: v1 diff --git a/data/plugins/shell-strategy.yaml b/data/plugins/shell-strategy.yaml index f0169db..1917f75 100644 --- a/data/plugins/shell-strategy.yaml +++ b/data/plugins/shell-strategy.yaml @@ -2,3 +2,7 @@ name: Shell Strategy repo: https://github.com/JRedeker/opencode-shell-strategy tagline: Avoid interactive shell hangs description: Instructions file that teaches LLMs how to avoid interactive shell commands that hang in non-TTY environments. +kind: plugin +topics: + - environment +compat: unknown diff --git a/data/plugins/simple-memory.yaml b/data/plugins/simple-memory.yaml index a8faa7f..cf76b74 100644 --- a/data/plugins/simple-memory.yaml +++ b/data/plugins/simple-memory.yaml @@ -1,4 +1,9 @@ name: Simple Memory -repo: https://github.com/cnicolov/opencode-plugin-simple-memory +repo: https://github.com/ApplauseLab/opencode-plugin-simple-memory tagline: Git-based memory description: Simple plugin to manage memory inside a git repo that can be committed and reviewed by team members. +kind: plugin +topics: + - memory + - git +compat: v2 diff --git a/data/plugins/smart-title.yaml b/data/plugins/smart-title.yaml index 7cf59b5..4c45825 100644 --- a/data/plugins/smart-title.yaml +++ b/data/plugins/smart-title.yaml @@ -2,3 +2,7 @@ name: Smart Title repo: https://github.com/Tarquinen/opencode-smart-title tagline: Auto-generate session titles description: Auto-generates meaningful session titles using AI. +kind: plugin +topics: + - sessions +compat: v1 diff --git a/data/plugins/smart-voice-notify.yaml b/data/plugins/smart-voice-notify.yaml index f814bfa..09964c7 100644 --- a/data/plugins/smart-voice-notify.yaml +++ b/data/plugins/smart-voice-notify.yaml @@ -2,3 +2,8 @@ name: Smart Voice Notify repo: https://github.com/MasuRii/opencode-smart-voice-notify tagline: Intelligent voice notifications description: Smart voice notification plugin with multiple TTS engines (ElevenLabs, Edge TTS, SAPI) and intelligent reminder system. +kind: plugin +topics: + - notifications + - voice +compat: v1 diff --git a/data/plugins/solo-memory.yaml b/data/plugins/solo-memory.yaml new file mode 100644 index 0000000..d6f0831 --- /dev/null +++ b/data/plugins/solo-memory.yaml @@ -0,0 +1,9 @@ +name: Solo Memory +repo: https://github.com/baaai123/solo-memory +tagline: Transparent long-term memory — auto weave/ingest, no agent discipline required +description: A transparent long-term memory plugin for OpenCode. The chat.message hook auto-injects memory context before every turn, and the event hook auto-stores user+assistant pairs after replies — the agent never needs to remember to call memory tools. Local-first (SQLite + ChromaDB, zero cloud), bilingual (Chinese via BM25/jieba, English via semantic bge-large-en-v1.5), with a gap-detection → crawl → synthesize → verify learning loop and 7 MCP tools. +kind: plugin +topics: + - memory + - workflow +compat: v1 diff --git a/data/plugins/sortie-dogs.yaml b/data/plugins/sortie-dogs.yaml new file mode 100644 index 0000000..f5b0d29 --- /dev/null +++ b/data/plugins/sortie-dogs.yaml @@ -0,0 +1,8 @@ +name: Sortie-dogs +repo: https://github.com/zufall-upon/Sortie-dogs +tagline: Agents write only the files they declared — manifest-gated orchestration loop +description: An opt-in OpenCode orchestration plugin. Every task starts with an explicit write manifest; edits and handoffs outside that scope are rejected. Three bounded scouts investigate read-only, a dedicated worker implements, and canonical validation plus risk-based review gate coordinator-owned completion. Dormant until you run /sortie — ordinary OpenCode sessions are untouched. +kind: plugin +topics: + - orchestration +compat: v2 diff --git a/data/plugins/sourcepier.yaml b/data/plugins/sourcepier.yaml new file mode 100644 index 0000000..41db35a --- /dev/null +++ b/data/plugins/sourcepier.yaml @@ -0,0 +1,9 @@ +name: SourcePier +repo: https://github.com/happyeric77/sourcepier +tagline: Persistent project documents across OpenCode sessions +description: Manage project-scoped Markdown documents in the OpenCode v2 native TUI. Import, search, edit, and export Sources across sessions, while agents can discover and read them through read-only tools. +kind: plugin +topics: + - memory + - docs +compat: v2 diff --git a/data/plugins/spritecook-mcp.yaml b/data/plugins/spritecook-mcp.yaml new file mode 100644 index 0000000..1c815f8 --- /dev/null +++ b/data/plugins/spritecook-mcp.yaml @@ -0,0 +1,18 @@ +name: SpriteCook MCP +repo: https://github.com/SpriteCook/opencode-plugin +homepage: https://spritecook.ai +tagline: Generate 2D game assets from OpenCode with SpriteCook +description: Connect OpenCode to SpriteCook to generate game assets with AI, including sprites, pixel art, icons, tilesets, characters, and animations. +kind: plugin +also: + - mcp-server +topics: + - media +compat: v2 +tags: + - mcp + - game-assets + - pixel-art + - sprites + - image-generation + - game-dev diff --git a/data/plugins/stay-awake.yaml b/data/plugins/stay-awake.yaml new file mode 100644 index 0000000..e8df1b0 --- /dev/null +++ b/data/plugins/stay-awake.yaml @@ -0,0 +1,8 @@ +name: Stay Awake +repo: https://github.com/AuroraAeon/opencode-stay-awake +tagline: Keep the computer awake only while a session is generating +description: Long agent runs (model streaming, tool execution, compaction, rate-limit retries) routinely take minutes with no user input, and default OS power settings treat that as idle and suspend mid-prompt. This plugin holds a system sleep inhibitor for exactly as long as any session is generating, then releases it — caffeinate -dims -w on macOS, systemd-inhibit on Linux, no-op elsewhere. Busy detection is event-driven rather than polling, so a tool call that runs for minutes keeps its work item open instead of being released mid-run. Every inhibitor is bound to the server pid and a stale cap bounds any lost end event, so the machine can never be wedged awake. Zero dependencies, MIT. +kind: plugin +topics: + - environment +compat: v2 diff --git a/data/plugins/subtask2.yaml b/data/plugins/subtask2.yaml index 30df54e..e1c561d 100644 --- a/data/plugins/subtask2.yaml +++ b/data/plugins/subtask2.yaml @@ -2,3 +2,7 @@ name: Subtask2 repo: https://github.com/spoons-and-mirrors/subtask2 tagline: Orchestration system description: Extend opencode /commands into a powerful orchestration system with granular flow control. +kind: plugin +topics: + - orchestration +compat: v1 diff --git a/data/plugins/superpowers.yaml b/data/plugins/superpowers.yaml new file mode 100644 index 0000000..cfd5f7a --- /dev/null +++ b/data/plugins/superpowers.yaml @@ -0,0 +1,8 @@ +name: Superpowers +repo: https://github.com/obra/superpowers +tagline: Complete software development methodology with composable skills for coding agents +description: Gives your coding agent a structured methodology - brainstorm specs, write plans, run TDD, dispatch subagents, and review work. Skills trigger automatically across Claude Code, OpenCode, Codex, Gemini CLI, Cursor, and GitHub Copilot CLI. +kind: plugin +topics: + - workflow +compat: v2 diff --git a/data/plugins/swarm-plugin.yaml b/data/plugins/swarm-plugin.yaml index 2e0904c..026c51a 100644 --- a/data/plugins/swarm-plugin.yaml +++ b/data/plugins/swarm-plugin.yaml @@ -1,4 +1,8 @@ name: Swarm Plugin -repo: https://github.com/joelhooks/opencode-swarm-plugin +repo: https://github.com/joelhooks/swarm-tools tagline: Swarm intelligence description: Swarm plugin for opencode enabling swarm-based agent coordination. +kind: plugin +topics: + - orchestration +compat: v2 diff --git a/data/plugins/telemetry-dev-opencode.yaml b/data/plugins/telemetry-dev-opencode.yaml new file mode 100644 index 0000000..a145d13 --- /dev/null +++ b/data/plugins/telemetry-dev-opencode.yaml @@ -0,0 +1,8 @@ +name: "@telemetry-dev/opencode" +repo: https://github.com/telemetry-dev/telemetry +tagline: OpenTelemetry traces for OpenCode agent turns, model calls, and tools +description: Records OpenCode agent turns, model calls, tool executions, and session events with OpenTelemetry for telemetry.dev. Available as the @telemetry-dev/opencode npm package; source and setup instructions are in packages/opencode of the linked SDK repository. +kind: plugin +topics: + - observability +compat: v1 diff --git a/data/plugins/telepathy.yaml b/data/plugins/telepathy.yaml new file mode 100644 index 0000000..08ef47c --- /dev/null +++ b/data/plugins/telepathy.yaml @@ -0,0 +1,24 @@ +name: telepathy +repo: https://github.com/Winterrks/telepathy +tagline: OpenCode sessions message Claude Code, Codex, Gemini CLI and other agent sessions on the same machine +description: Adds telepathy_list_peers, telepathy_send_message and telepathy_read_messages as native OpenCode tools, so an OpenCode session can find and message the Claude Code, Codex, Gemini CLI, Copilot CLI, Cursor and other agent sessions running on the same machine. The plugin runs inside OpenCode and starts a turn in an idle session when a message arrives, so agents can coordinate without polling. Everything stays local (messages are JSON files in ~/.telepathy, with no network calls and no telemetry). MIT licensed. +kind: plugin +topics: + - orchestration +compat: v2 +scope: + - global +tags: + - multi-agent + - messaging + - claude-code + - codex + - local +installation: | + Add telepathy to the `plugin` list in `~/.config/opencode/opencode.json`: + + ```json + { "plugin": ["telepathy@git+https://github.com/Winterrks/telepathy.git"] } + ``` + + Requires Node.js 20 or newer. OpenCode 1.x only. Install telepathy in the other agents too (see the repository README). diff --git a/data/plugins/token-monitor.yaml b/data/plugins/token-monitor.yaml index e865c55..9aebcdb 100644 --- a/data/plugins/token-monitor.yaml +++ b/data/plugins/token-monitor.yaml @@ -2,3 +2,8 @@ name: Token Monitor repo: https://github.com/Ainsley0917/opencode-token-monitor tagline: Token analysis & cost tracking with budgets, trends, and per-project analytics description: Track token usage (input/output/reasoning/cache), estimate costs, view daily trends with ASCII charts, set budget alerts, and export data. Supports per-agent breakdown, agent×model cross-analysis, and project-scoped analytics. +kind: plugin +topics: + - cost + - observability +compat: v1 diff --git a/data/plugins/tokenscope.yaml b/data/plugins/tokenscope.yaml index 6c0302a..b9f8015 100644 --- a/data/plugins/tokenscope.yaml +++ b/data/plugins/tokenscope.yaml @@ -2,3 +2,7 @@ name: Tokenscope repo: https://github.com/ramtinJ95/opencode-tokenscope tagline: Token analysis & cost tracking description: Tokenscope, Comprehensive token usage analysis and cost tracking for opencode sessions. +kind: plugin +topics: + - cost +compat: v1 diff --git a/data/plugins/toon-config.yaml b/data/plugins/toon-config.yaml index 975c13a..2038b56 100644 --- a/data/plugins/toon-config.yaml +++ b/data/plugins/toon-config.yaml @@ -1,4 +1,9 @@ name: toon-config repo: https://github.com/mmynsted/opencode-toon-config-plugin tagline: Loads TOON based, AGENTS.toon rather than Markdown -description: Use TOON based agent instructions. Command to analyize and improve agent instructions. +description: Use TOON based agent instructions. Command to analyize and improve agent instructions. +kind: plugin +topics: + - prompting + - context +compat: v1 diff --git a/data/plugins/topic-compaction.yaml b/data/plugins/topic-compaction.yaml new file mode 100644 index 0000000..8b9a35d --- /dev/null +++ b/data/plugins/topic-compaction.yaml @@ -0,0 +1,9 @@ +name: Topic Compaction +repo: https://github.com/lhaarman/opencode-topic-compaction +tagline: Appends late-position overrides to compaction prompts for topic-based session summarization. +description: This plugin improves session compaction continuity by restructuring how opencode summarizes file activity. Instead of a single linear stream that can lose track of pending work, the plugin clusters actual file activity into thematic topics during compaction. Each topic carries an explicit `blocked:` status field, and open blockers are guaranteed to survive across successive compaction cycles, ensuring unresolved work persists through session restarts. +kind: plugin +topics: + - context + - sessions +compat: v2 diff --git a/data/plugins/tree-sitter-language-pack.yaml b/data/plugins/tree-sitter-language-pack.yaml index 512c407..1905099 100644 --- a/data/plugins/tree-sitter-language-pack.yaml +++ b/data/plugins/tree-sitter-language-pack.yaml @@ -1,7 +1,13 @@ name: Tree-sitter Language Pack -repo: https://github.com/xberg-io/plugins +repo: https://github.com/xberg-io/tree-sitter-language-pack +npm: "@xberg-io/opencode-tree-sitter-language-pack" +homepage: https://www.npmjs.com/package/@xberg-io/opencode-tree-sitter-language-pack tagline: Code intelligence for 300+ languages description: OpenCode plugin exposing tree-sitter-language-pack tools for parsing and extracting structure, imports, and symbols from 300+ languages. +kind: plugin +topics: + - code-intel +compat: v2 scope: - global - project @@ -10,7 +16,6 @@ tags: - parsing - code - cli -homepage: https://www.npmjs.com/package/@xberg-io/opencode-tree-sitter-language-pack installation: | Add the package to `opencode.json`: diff --git a/data/plugins/typeui.yaml b/data/plugins/typeui.yaml index 9030dab..1f95b85 100644 --- a/data/plugins/typeui.yaml +++ b/data/plugins/typeui.yaml @@ -1,5 +1,9 @@ name: TypeUI repo: https://github.com/bergside/typeui -tagline: Design systems, UI prompts, and layout variation guidance -description: 'Open-source design layer for OpenCode that provides curated design skills, UI prompts, and layout variation guidance so agents can generate more consistent interfaces. Includes an OpenCode setup guide.' homepage: https://www.typeui.sh/docs/guides/opencode +tagline: Design systems, UI prompts, and layout variation guidance +description: Open-source design layer for OpenCode that provides curated design skills, UI prompts, and layout variation guidance so agents can generate more consistent interfaces. Includes an OpenCode setup guide (linked as Docs). +kind: plugin +topics: + - prompting +compat: v1 diff --git a/data/plugins/ul-opencode-event.yaml b/data/plugins/ul-opencode-event.yaml index 9dc59a2..3a218c1 100644 --- a/data/plugins/ul-opencode-event.yaml +++ b/data/plugins/ul-opencode-event.yaml @@ -1,13 +1,20 @@ name: ul-opencode-event repo: https://gitee.com/ulthon/ul-opencode-event +npm: "@ulthon/ul-opencode-event" +homepage: https://www.npmjs.com/package/@ulthon/ul-opencode-event tagline: Multi-channel notifications (SMTP, DingTalk, Feishu) and token usage analytics -description: | +description: |- Get notified when OpenCode sessions complete, error, or need your attention - via SMTP email, DingTalk robot, or Feishu robot. - Multi-channel: SMTP, DingTalk, Feishu, local JSONL file - Multi-level token analytics: message / session / total / project scopes - 74+ template variables with i18n support (zh/en) - Global + project config merge, automatic DB preload for crash recovery - Built-in CLI test tool +kind: plugin +topics: + - notifications + - cost +compat: v1 tags: - notifications - email @@ -15,4 +22,3 @@ tags: - feishu - token-tracking - usage-analytics -homepage: https://www.npmjs.com/package/@ulthon/ul-opencode-event diff --git a/data/plugins/unforgit.yaml b/data/plugins/unforgit.yaml new file mode 100644 index 0000000..d71c95d --- /dev/null +++ b/data/plugins/unforgit.yaml @@ -0,0 +1,28 @@ +name: Unforgit +repo: https://github.com/MiguelMedeiros/unforgit +homepage: https://unforgit.com/docs/mcp +tagline: Git-backed repository memory for AI agents +description: Unforgit gives OpenCode and other coding agents durable, repository-scoped memory through MCP. Store and recall project decisions, conventions, gotchas, and playbooks locally in a Git-backed memory base, with optional sync and curation workflows. +kind: plugin +topics: + - memory + - git +compat: v2 +scope: + - project +tags: + - memory + - mcp + - agents + - knowledge-base + - repository +installation: | + Install the published CLI, then generate OpenCode project instructions and MCP config: + + ```bash + npm install -g unforgit + cd your-project + unforgit init --ide opencode + ``` + + This writes `AGENTS.md` guidance and `opencode.json` MCP configuration using the `unforgit-mcp` stdio server. diff --git a/data/plugins/unmoji.yaml b/data/plugins/unmoji.yaml index ffbd25d..c49bafc 100644 --- a/data/plugins/unmoji.yaml +++ b/data/plugins/unmoji.yaml @@ -2,3 +2,7 @@ name: UNMOJI repo: https://codeberg.org/bastiangx/opencode-unmoji tagline: Strip emojis from output description: A simple plugin that strips ALL emojis from agent outputs in Opencode. +kind: plugin +topics: + - ui +compat: unknown diff --git a/data/plugins/veris-daytona.yaml b/data/plugins/veris-daytona.yaml new file mode 100644 index 0000000..9701e08 --- /dev/null +++ b/data/plugins/veris-daytona.yaml @@ -0,0 +1,57 @@ +name: Veris for Daytona +repo: https://github.com/veris-ai/veris-daytona +npm: "@veris-ai/daytona-opencode" +homepage: https://github.com/veris-ai/veris-daytona/tree/main/daytona-opencode#readme +tagline: OpenCode sessions run in a Daytona sandbox whose vendor API calls are answered by Veris twins +description: Every OpenCode session runs in a Daytona sandbox whose calls to Stripe and the rest of your vendor stack are answered by stateful Veris twins, and the agent gets a receipt of what the vendor actually received. Unmodified code, real hostnames, no image to build. +kind: plugin +topics: + - code-quality + - security +compat: v1 +scope: + - global + - project +tags: + - veris + - daytona + - sandbox + - integration-testing + - api-mocking + - testing +installation: | + ## Links + + - npm: https://www.npmjs.com/package/@veris-ai/daytona-opencode + - Source: https://github.com/veris-ai/veris-daytona/tree/main/daytona-opencode + - Docs: https://github.com/veris-ai/veris-daytona/tree/main/daytona-opencode#readme + - Veris: https://veris.ai + + ## Installation + + Add the plugin to `opencode.json`: + + ```jsonc + { "plugin": ["@veris-ai/daytona-opencode"] } + ``` + + Then export three keys: + + ```sh + export DAYTONA_API_KEY=... # https://app.daytona.io/dashboard/keys + export VERIS_API_KEY=... # https://studio.veris.ai + export VERIS_ENVIRONMENT_ID=... # the Veris environment that decides which vendor twins you get + ``` + + Then run `opencode`. No image to build, no network configuration, nothing to start. + + ## What the agent gets + + - The ten sandbox-backed tools from `@daytona/opencode`: bash, read, write, edit, + multiedit, ls, glob, grep, getPreviewURL, gitSync. + - `verisReceipt`, which reports what the twin *received*. + - The Veris MCP server. + + An empty receipt after a green run means the code never reached its dependency. + Ask an agent to call the Stripe API and it will report success whether or not it + made the call. The transcripts are identical; the receipts are not. diff --git a/data/plugins/veris-e2b.yaml b/data/plugins/veris-e2b.yaml new file mode 100644 index 0000000..ea23698 --- /dev/null +++ b/data/plugins/veris-e2b.yaml @@ -0,0 +1,60 @@ +name: Veris for E2B +repo: https://github.com/veris-ai/veris-e2b +npm: "@veris-ai/e2b-opencode" +homepage: https://github.com/veris-ai/veris-e2b/tree/main/e2b-opencode#readme +tagline: OpenCode sessions run in an E2B sandbox whose vendor API calls are answered by Veris twins +description: Every OpenCode session runs in an E2B sandbox whose outbound vendor API calls are answered by stateful Veris twins, with a receipt of what the vendor actually received. One line in opencode.json - no template to register, no server to start. +kind: plugin +topics: + - code-quality + - security +compat: v1 +scope: + - global + - project +tags: + - veris + - e2b + - sandbox + - integration-testing + - api-mocking + - testing +installation: | + ## Links + + - npm: https://www.npmjs.com/package/@veris-ai/e2b-opencode + - Source: https://github.com/veris-ai/veris-e2b/tree/main/e2b-opencode + - Docs: https://github.com/veris-ai/veris-e2b/tree/main/e2b-opencode#readme + - Veris: https://veris.ai + + ## Installation + + Add the plugin to `opencode.json`: + + ```jsonc + { "plugin": ["@veris-ai/e2b-opencode"] } + ``` + + Then export three keys: + + ```sh + export E2B_API_KEY=... # https://e2b.dev/dashboard + export VERIS_API_KEY=... # https://app.veris.ai + export VERIS_ENVIRONMENT_ID=... # the Veris environment that decides which vendor twins you get + ``` + + Then run `opencode`. No image to build, no template to register, no server to start, + no URL to copy. + + ## What the agent gets + + Eight sandbox-backed replacements for OpenCode's built-in tools (bash, read, write, + edit, multiedit, ls, glob, grep), plus three additions: + + - `verisReceipt`: what the twin *received*, the tool that separates a real + integration from a plausible-looking one. + - `gitSync`: commit in the sandbox and pull into the local `opencode/N` branch, + returning only once the changes are on your machine. + - `getPreviewURL`: the public URL for a port inside the sandbox. + + An empty receipt after a green run means the code never reached its dependency. diff --git a/data/plugins/veris-sim.yaml b/data/plugins/veris-sim.yaml new file mode 100644 index 0000000..73b0a11 --- /dev/null +++ b/data/plugins/veris-sim.yaml @@ -0,0 +1,57 @@ +name: Veris Sim +repo: https://github.com/veris-ai/plugins +npm: "@veris-ai/veris-sim-opencode" +homepage: https://github.com/veris-ai/plugins#readme +tagline: Three engineer-invoked commands that test an application against Veris twins of its services +description: Three engineer-invoked commands that test an application against Veris twins of the services it calls. setup wires a repository once. build measures every vendor claim the task rests on before designing, then proves the change through veris-proxy. fix reproduces the failure before touching source and proves it closed. Ships the veris MCP server. +kind: plugin +topics: + - code-quality + - security +compat: v2 +scope: + - global + - project +tags: + - veris + - integration-testing + - sandbox + - mcp + - testing + - commands +installation: | + ## Links + + - npm: https://www.npmjs.com/package/@veris-ai/veris-sim-opencode + - Source: https://github.com/veris-ai/plugins/tree/main/veris-sim + - Docs: https://github.com/veris-ai/plugins#readme + - Veris: https://veris.ai + + ## Installation + + ```sh + opencode plugin @veris-ai/veris-sim-opencode -g + ``` + + Equivalently, add `"@veris-ai/veris-sim-opencode"` to the `plugin` array in + `~/.config/opencode/opencode.json`. Then export your credential and restart + opencode: + + ```sh + export VERIS_API_KEY=... # https://app.veris.ai + ``` + + `VERIS_API_BASE` overrides the control plane (it defaults to + `https://svc.api.veris.ai`). Until the key is set, `opencode mcp list` shows the + `veris` server as failed; the commands still run, and `setup` walks you through it. + + ## Commands + + | command | what it does | + |---|---| + | `/veris-sim:setup` | wires the repository to a Veris environment, once: credential, environment, transport, one smoke run with proof of arrival | + | `/veris-sim:build ` | measures every vendor claim the task rests on against the twin before designing, proves the change through veris-proxy with a receipt | + | `/veris-sim:fix ` | reproduces the failure the issue describes before designing, proves the same failure closed with a receipt | + + The three are plain OpenCode commands: only the engineer starts them, the model + cannot invoke them on its own. The same three are also registered as skills. diff --git a/data/plugins/vibe-coding-slack-notifier.yaml b/data/plugins/vibe-coding-slack-notifier.yaml index e6684e1..cb9ca6c 100644 --- a/data/plugins/vibe-coding-slack-notifier.yaml +++ b/data/plugins/vibe-coding-slack-notifier.yaml @@ -1,4 +1,9 @@ name: Vibe Coding Slack Notifier -repo: https://github.com/Wangmerlyn/vibe-coding-slack-notifier +repo: https://github.com/Wangmerlyn/coding-agent-notifier tagline: Slack DM alerts for OpenCode task completion description: OpenCode-compatible Slack notifier plugin and toolkit for Codex, OpenCode, Claude Code, and Gemini workflows. +kind: plugin +topics: + - notifications + - remote +compat: v1 diff --git a/data/plugins/wakatime.yaml b/data/plugins/wakatime.yaml index 66227f8..c14a569 100644 --- a/data/plugins/wakatime.yaml +++ b/data/plugins/wakatime.yaml @@ -2,3 +2,8 @@ name: WakaTime repo: https://github.com/angristan/opencode-wakatime tagline: WakaTime integration description: WakaTime integration plugin for tracking coding activity in opencode sessions. +kind: plugin +topics: + - observability + - integrations +compat: v2 diff --git a/data/plugins/warcraft-notifications.yaml b/data/plugins/warcraft-notifications.yaml index 9bf97d9..6529f48 100644 --- a/data/plugins/warcraft-notifications.yaml +++ b/data/plugins/warcraft-notifications.yaml @@ -2,3 +2,7 @@ name: Warcraft Notifications repo: https://github.com/pantheon-org/opencode-warcraft-notifications tagline: Fun sound notifications description: Notification plugin with Warcraft sounds for opencode completion alerts. +kind: plugin +topics: + - notifications +compat: v1 diff --git a/data/plugins/with-context-mcp.yaml b/data/plugins/with-context-mcp.yaml index ee303ea..2dd4157 100644 --- a/data/plugins/with-context-mcp.yaml +++ b/data/plugins/with-context-mcp.yaml @@ -2,3 +2,9 @@ name: With Context MCP repo: https://github.com/boxpositron/with-context-mcp tagline: Project-specific markdown notes description: MCP server for managing project-specific markdown notes with templates, batch edits, and ignore patterns. +kind: plugin +also: + - mcp-server +topics: + - memory +compat: unknown diff --git a/data/plugins/worktree-memory-sync.yaml b/data/plugins/worktree-memory-sync.yaml index 0c8ffb6..af2906d 100644 --- a/data/plugins/worktree-memory-sync.yaml +++ b/data/plugins/worktree-memory-sync.yaml @@ -2,3 +2,8 @@ name: Worktree Memory Sync repo: https://github.com/Edison-A-N/opencode-worktree-memory-sync tagline: Auto-sync memory to git worktrees description: Automatically copies .opencode/memory/ from the main repository into new git worktrees on session init. Detects worktrees via the .git file, resolves the main repo, and syncs memory files only when the destination is empty — so it never overwrites your changes. +kind: plugin +topics: + - memory + - git +compat: v1 diff --git a/data/plugins/wpm.yaml b/data/plugins/wpm.yaml new file mode 100644 index 0000000..9d35b99 --- /dev/null +++ b/data/plugins/wpm.yaml @@ -0,0 +1,8 @@ +name: WPM +repo: https://github.com/nohavye-dev/wpm-system +tagline: Confidence-weighted persistent memory with proofs +description: Local project memory maintained automatically during work. Every memory carries a 0-1 confidence score that only rises with external proofs; entries are validated or contradicted with evidence, never deleted, and deduplicated. Hybrid semantic + graph retrieval recalls the right memory when it matters. +kind: plugin +topics: + - memory +compat: v1 diff --git a/data/plugins/wsl-notifications.yaml b/data/plugins/wsl-notifications.yaml new file mode 100644 index 0000000..8f6a5de --- /dev/null +++ b/data/plugins/wsl-notifications.yaml @@ -0,0 +1,9 @@ +name: WSL Notifications +repo: https://github.com/captainmmd1304/opencode-wsl-notifications +tagline: Native Windows toast notifications from WSL +description: Enables OpenCode running inside WSL to send native Windows toast notifications for task completion, prompts, and errors using PowerShell and BurntToast. +kind: plugin +topics: + - notifications + - environment +compat: v1 diff --git a/data/plugins/xberg.yaml b/data/plugins/xberg.yaml index 67021ad..a563f5b 100644 --- a/data/plugins/xberg.yaml +++ b/data/plugins/xberg.yaml @@ -1,7 +1,13 @@ name: Xberg -repo: https://github.com/xberg-io/plugins +repo: https://github.com/xberg-io/xberg +npm: "@xberg-io/opencode-xberg" +homepage: https://www.npmjs.com/package/@xberg-io/opencode-xberg tagline: Local document extraction for 97+ formats description: OpenCode plugin exposing xberg CLI tools for document extraction, MIME detection, and supported-format discovery. +kind: plugin +topics: + - media +compat: v2 scope: - global - project @@ -10,7 +16,6 @@ tags: - extraction - ocr - cli -homepage: https://www.npmjs.com/package/@xberg-io/opencode-xberg installation: | Add the package to `opencode.json`: diff --git a/data/plugins/xquik.yaml b/data/plugins/xquik.yaml index ef3f7b6..c1db51b 100644 --- a/data/plugins/xquik.yaml +++ b/data/plugins/xquik.yaml @@ -2,3 +2,10 @@ name: Xquik repo: https://github.com/Xquik-dev/x-twitter-scraper tagline: X/Twitter data skill & MCP server description: X/Twitter data skill — MCP server, REST API, 20 extraction tools. Works with Claude Code, Cursor, Codex, and 40+ agents. +kind: plugin +also: + - mcp-server +topics: + - web + - integrations +compat: unknown diff --git a/data/plugins/zellij-namer.yaml b/data/plugins/zellij-namer.yaml index 79a08c7..c225ea4 100644 --- a/data/plugins/zellij-namer.yaml +++ b/data/plugins/zellij-namer.yaml @@ -2,3 +2,8 @@ name: Zellij Namer repo: https://github.com/24601/opencode-zellij-namer tagline: Auto-rename Zellij sessions description: Keeps your Zellij session name in sync with your work. +kind: plugin +topics: + - sessions + - environment +compat: v1 diff --git a/data/projects/ag-local-bridge.yaml b/data/projects/ag-local-bridge.yaml new file mode 100644 index 0000000..f8d90ff --- /dev/null +++ b/data/projects/ag-local-bridge.yaml @@ -0,0 +1,8 @@ +name: Antigravity Local Bridge +repo: https://github.com/marcodiniz/ag-local-bridge +tagline: Local OpenAI-compatible API bridge for Antigravity +description: An Antigravity extension that exposes a local OpenAI-compatible HTTP server on localhost:11435. Enables any OpenAI-compatible tool (OpenCode, Aider, Cline, Continue.dev) to use Antigravity's Gemini, Claude, and GPT models without additional API keys. +kind: tool +topics: + - providers +compat: n/a diff --git a/data/projects/agent-dotfiles.yaml b/data/projects/agent-dotfiles.yaml index f1fa3f5..c9147bf 100644 --- a/data/projects/agent-dotfiles.yaml +++ b/data/projects/agent-dotfiles.yaml @@ -2,3 +2,8 @@ name: agent-dotfiles repo: https://github.com/saqibameen/agent-dotfiles tagline: Write AI coding rules once, sync to every agent description: Write AI coding rules once, sync to every agent. Supports Command Code, Claude Code, Cursor, Copilot, Codex, and OpenCode. +kind: tool +topics: + - prompting + - environment +compat: n/a diff --git a/data/projects/agent-harness.yaml b/data/projects/agent-harness.yaml index 6a7107c..e199b4b 100644 --- a/data/projects/agent-harness.yaml +++ b/data/projects/agent-harness.yaml @@ -1,11 +1,16 @@ name: agent-harness repo: https://github.com/ar27111994/agent-harness +npm: "@ar27111994/agent-harness" +homepage: https://www.npmjs.com/package/@ar27111994/agent-harness tagline: Reusable agent asset lifecycle for OpenCode workspaces description: A Node.js CLI for discovering, curating, staging, activating, and wiring reusable AI-agent assets into developer workspaces, including OpenCode. +kind: tool +topics: + - workflow +compat: n/a tags: - cli - agent-assets - workspace - discovery - opencode -homepage: https://www.npmjs.com/package/@ar27111994/agent-harness \ No newline at end of file diff --git a/data/projects/agent-historian.yaml b/data/projects/agent-historian.yaml new file mode 100644 index 0000000..7206419 --- /dev/null +++ b/data/projects/agent-historian.yaml @@ -0,0 +1,8 @@ +name: agent-historian +repo: https://github.com/adlternative/agent-historian +tagline: Search and read past AI coding-agent sessions from the CLI +description: A read-only CLI (ochist) plus an Agent Skill so OpenCode and other agents can search and re-read their own past conversation history before redoing research. Reads transcripts the agents already persist locally — no memory layer, embeddings, index, daemon, or network. Project- or global-scoped, subagent-aware, zero runtime dependencies. +kind: tool +topics: + - sessions +compat: n/a diff --git a/data/projects/agent-manager.yaml b/data/projects/agent-manager.yaml new file mode 100644 index 0000000..1121977 --- /dev/null +++ b/data/projects/agent-manager.yaml @@ -0,0 +1,10 @@ +name: agent-manager +repo: https://github.com/YoanWai/agent-manager +homepage: https://agent-manager.dev/docs/ +tagline: Terminal UI that runs OpenCode and other coding-agent CLIs side by side in persistent tmux sessions +description: Terminal UI that runs OpenCode alongside Claude Code, Codex and other coding-agent CLIs, each in its own persistent tmux session. It launches the installed OpenCode CLI unmodified, so login, config and MCP servers carry over. One list shows every session's live status, prompts go into a pane without attaching, a session can spawn into its own git worktree, and a full-file diff review sends line comments back to the agent. Runs on macOS, Linux and Windows via WSL2. Apache-2.0. +kind: client +topics: + - sessions + - environment +compat: n/a diff --git a/data/projects/agent-nexus.yaml b/data/projects/agent-nexus.yaml new file mode 100644 index 0000000..b8eef7c --- /dev/null +++ b/data/projects/agent-nexus.yaml @@ -0,0 +1,8 @@ +name: Agent Nexus +repo: https://github.com/Strategiumfinancepartner/AgentNexus +tagline: Remote MCP registry of 700+ APIs, MCP servers and CLIs, each live-probed so agents pick tools that actually work +description: Remote MCP server and discovery registry for AI agents. Every entry (APIs, MCP servers, CLIs) is continuously probed for liveness, capability and response schema, so an agent can search, compare and pick a tool based on live evidence instead of a README. Agents can also follow an entry and get alerted when it goes down or changes shape. Works with opencode via remote URL (https://agentnexus.app/api/public/mcp, free tier without key) and publishes a ready-to-use config at https://agentnexus.app/.well-known/opencode. +kind: mcp-server +topics: + - integrations +compat: n/a diff --git a/data/projects/agent-of-empires.yaml b/data/projects/agent-of-empires.yaml index 8b793c8..b2f4a36 100644 --- a/data/projects/agent-of-empires.yaml +++ b/data/projects/agent-of-empires.yaml @@ -1,4 +1,9 @@ name: Agent of Empires -repo: https://github.com/njbrake/agent-of-empires +repo: https://github.com/agent-of-empires/agent-of-empires tagline: Multi-session TUI for OpenCode description: A terminal UI for managing multiple OpenCode sessions in tmux with git worktree integration and Docker sandboxing. +kind: client +topics: + - sessions + - orchestration +compat: n/a diff --git a/data/projects/agent-qa.yaml b/data/projects/agent-qa.yaml new file mode 100644 index 0000000..da308b6 --- /dev/null +++ b/data/projects/agent-qa.yaml @@ -0,0 +1,13 @@ +name: Agent QA +repo: https://github.com/vostride/agent-qa +tagline: The self-improving QA agent for software teams +description: Open-source QA harness for authoring and running natural-language web and mobile tests, with persistent memory, self-healing, a dashboard, Agent Skills, and an MCP server. Configure its `agent-qa mcp` command in OpenCode to expose tools for creating, executing, inspecting, triaging, and repairing tests. +kind: mcp-server +topics: + - code-quality +compat: n/a +tags: + - testing + - qa + - mcp + - automation diff --git a/data/projects/agent-run-inspector.yaml b/data/projects/agent-run-inspector.yaml new file mode 100644 index 0000000..0ecf025 --- /dev/null +++ b/data/projects/agent-run-inspector.yaml @@ -0,0 +1,9 @@ +name: Agent Run Inspector +repo: https://github.com/kaboumou/agent-run-inspector-docs +tagline: Local, read-only reports for OpenCode session exports - repeated tool calls, failures, completion +description: "Generates a self-contained HTML (and JSON) report from `opencode export ` data: repeated identical tool calls, recovered vs unresolved failures, completion state, and tool/usage statistics. Python standard library only, no network calls, and the input file is never modified. Tested with OpenCode 1.18.x; other versions are best-effort with an explicit note in the report. The tool itself is a paid download (USD $49 individual / $149 team); the linked repository contains the documentation, screenshots, and a free sample pack of synthetic inputs and example reports." +kind: tool +topics: + - sessions + - observability +compat: n/a diff --git a/data/projects/agent-sessions-team.yaml b/data/projects/agent-sessions-team.yaml new file mode 100644 index 0000000..ab23d10 --- /dev/null +++ b/data/projects/agent-sessions-team.yaml @@ -0,0 +1,9 @@ +name: agent-sessions +repo: https://github.com/prajwalgajakesari/agent-sessions +tagline: Share OpenCode, Claude Code and Codex sessions with your team through git +description: Push the current OpenCode session into the repo as a redacted transcript plus a handoff summary under .claude/sessions/, and pull teammates' sessions from any coding agent straight into your chat. Ships as an Agent Skills skill that OpenCode loads from ~/.agents/skills, plus a Claude Code plugin and a CLI on PyPI (agent-sessions-cli). +kind: tool +topics: + - sessions + - git +compat: n/a diff --git a/data/projects/agent-sessions.yaml b/data/projects/agent-sessions.yaml new file mode 100644 index 0000000..3739cbc --- /dev/null +++ b/data/projects/agent-sessions.yaml @@ -0,0 +1,15 @@ +name: Agent Sessions +repo: https://github.com/jazzyalex/agent-sessions +homepage: https://jazzyalex.github.io/agent-sessions +tagline: Local OpenCode session-history browser +description: Local-first macOS app for browsing and full-text searching OpenCode session history. It reads local OpenCode SQLite history in read-only mode, opens old runs as readable timelines, and can resume sessions where the OpenCode CLI supports it. +kind: client +topics: + - sessions +compat: n/a +tags: + - session-history + - transcript-search + - macos + - gui + - sqlite diff --git a/data/projects/agent-teams.yaml b/data/projects/agent-teams.yaml new file mode 100644 index 0000000..d24fe3c --- /dev/null +++ b/data/projects/agent-teams.yaml @@ -0,0 +1,15 @@ +name: Agent Teams AI +repo: https://github.com/777genius/agent-teams-ai +homepage: https://agentteams.live/ +tagline: Multi-team control plane for OpenCode and other coding agents +description: Open-source orchestration platform for autonomous coding-agent teams with first-class OpenCode support. Agents manage Kanban tasks, message each other, review work, and coordinate across teams while users steer with high-level commands. Also supports Codex, Claude Code, Cursor, Grok, GitHub Copilot, Kiro, and other providers. +kind: tool +topics: + - orchestration +compat: n/a +tags: + - multi-agent + - opencode + - orchestration + - kanban + - code-review diff --git a/data/projects/agent-workbench.yaml b/data/projects/agent-workbench.yaml new file mode 100644 index 0000000..0435892 --- /dev/null +++ b/data/projects/agent-workbench.yaml @@ -0,0 +1,9 @@ +name: Agent Workbench +repo: https://github.com/cvelasquez/agent-workbench +tagline: Local web UI for OpenCode and three other agent CLIs, with one shared history +description: Runs OpenCode through its own opencode serve process, next to Claude Code, Codex and Antigravity CLI, each in a browser tab. Shows OpenCode sessions as conversation cards read from its database in read-only mode, lets you answer its questions and see its permission waits from the UI, hands a conversation over to another CLI and searches across all of them. Never opens auth.json or opencode.json, no telemetry. +kind: client +topics: + - sessions + - remote +compat: n/a diff --git a/data/projects/agentbox.yaml b/data/projects/agentbox.yaml new file mode 100644 index 0000000..d9f1a70 --- /dev/null +++ b/data/projects/agentbox.yaml @@ -0,0 +1,9 @@ +name: AgentBox +repo: https://github.com/madarco/agentbox +tagline: Run multiple coding agents in parallel, each in its own sandboxed VM +description: "Run OpenCode, Claude Code, and Codex in parallel — each teleported into its own sandboxed VM (local Docker, self-hosted, or cloud: Hetzner / Daytona / Vercel / E2B / DigitalOcean). Sub-1s checkpoint startup, per-box browser/VS Code/persistent shells, and git credentials stay on the host. MIT." +kind: tool +topics: + - security + - orchestration +compat: n/a diff --git a/data/projects/agentdeals.yaml b/data/projects/agentdeals.yaml index 10006a6..e657664 100644 --- a/data/projects/agentdeals.yaml +++ b/data/projects/agentdeals.yaml @@ -2,3 +2,7 @@ name: AgentDeals repo: https://github.com/robhunter/agentdeals tagline: MCP server aggregating free tiers, credits, and referral codes across 1,500+ developer tools description: Remote MCP server that surfaces free tiers, credits, trials, and referral codes for developer infrastructure — Railway, Vercel, Fly, OpenAI, Anthropic, and 1,500+ other vendors. Exposes four tools (search_deals, plan_stack, compare_vendors, track_changes) so an agent can find the cheapest way to ship a given stack. Works with opencode via remote URL (https://agentdeals-production.up.railway.app/mcp). Also tracks pricing changes over time. +kind: mcp-server +topics: + - cost +compat: n/a diff --git a/data/projects/agentfield.yaml b/data/projects/agentfield.yaml new file mode 100644 index 0000000..b129161 --- /dev/null +++ b/data/projects/agentfield.yaml @@ -0,0 +1,8 @@ +name: AgentField +repo: https://github.com/Agent-Field/agentfield +tagline: Control plane for orchestrating AI agent swarms as microservices — best-in-class DX +description: Open-source infrastructure for orchestrating AI agent swarms at scale. Best-in-class developer experience with SDKs for Python, Go, and TypeScript. Handles async execution, durable state, and observability. +kind: tool +topics: + - orchestration +compat: n/a diff --git a/data/projects/agentledger.yaml b/data/projects/agentledger.yaml new file mode 100644 index 0000000..76c0ba3 --- /dev/null +++ b/data/projects/agentledger.yaml @@ -0,0 +1,8 @@ +name: agentledger +repo: https://github.com/garyleelty/agentledger +tagline: Local-first cost ledger — what your coding agents really cost in tokens and money +description: Reads the session logs OpenCode, Claude Code, Codex and Gemini CLI already leave on disk and turns them into token and dollar totals. Prices cache reads and cache writes at their own rates instead of counting them as input, attributes spend by project/branch/model, detects context churn, and projects a budget. Zero dependencies, no network calls — your entire coding history never leaves the machine. +kind: tool +topics: + - cost +compat: n/a diff --git a/data/projects/agenttrace.yaml b/data/projects/agenttrace.yaml index 0d62f12..2299cf5 100644 --- a/data/projects/agenttrace.yaml +++ b/data/projects/agenttrace.yaml @@ -2,3 +2,8 @@ name: agenttrace repo: https://github.com/luoyuctl/agenttrace tagline: Local TUI for OpenCode session cost, health, and trace reports description: Local-first Bubble Tea TUI and report CLI for inspecting OpenCode and other AI coding-agent logs with cost, tokens, latency, tool failures, anomalies, health gates, diffs, and reports. +kind: client +topics: + - cost + - observability +compat: n/a diff --git a/data/projects/agitrack.yaml b/data/projects/agitrack.yaml new file mode 100644 index 0000000..a893524 --- /dev/null +++ b/data/projects/agitrack.yaml @@ -0,0 +1,16 @@ +name: aGiTrack +repo: https://github.com/core-aix/agitrack +tagline: Turns every agent turn into a traceable git commit, with a live dashboard +description: A terminal tool that drives OpenCode (or Claude Code or Codex) and automatically commits each agent turn, recording the prompt, the model, and the token cost alongside the diff, so the AI's work leaves a clean and reviewable git history. Ships with a live web dashboard for browsing commits, sessions, and token spend. +kind: tool +topics: + - git + - observability +compat: n/a +tags: + - cli + - git + - commits + - tokens + - dashboard + - opencode diff --git a/data/projects/aide.yaml b/data/projects/aide.yaml new file mode 100644 index 0000000..882de59 --- /dev/null +++ b/data/projects/aide.yaml @@ -0,0 +1,8 @@ +name: Aide +repo: https://github.com/ragnarwestad/aide +tagline: Spec-driven workflow as opencode skills, with a local dashboard that runs specs across projects +description: Skills (/aide-create, /aide-analyze, /aide-implement, /aide-archive) that write each change as four Markdown files — description, analysis, solution, status — before any code, then implement it test-first. The installer sets the skills up for opencode alongside Claude Code, Codex and GitHub Copilot. A local dashboard queues specs across projects and runs each step headless on the model chosen for it, including opencode's provider/model models, and merges only once the project's tests pass. +kind: skill +topics: + - workflow +compat: n/a diff --git a/data/projects/aionui.yaml b/data/projects/aionui.yaml new file mode 100644 index 0000000..acc3e6d --- /dev/null +++ b/data/projects/aionui.yaml @@ -0,0 +1,16 @@ +name: AionUi +repo: https://github.com/iOfficeAI/AionUi +homepage: https://www.aionui.com +tagline: Free, open-source multi-agent desktop client that gives OpenCode (and other CLIs) a GUI. +description: Cross-platform (macOS/Windows/Linux) desktop app that wraps OpenCode and other agent CLIs in a chat-based GUI. Supports any API key and multiple LLM providers with API-key polling, multi-session and multi-agent workflows, MCP and ACP protocols, file management and preview, code diff view, scheduled tasks, local data storage, and remote WebUI access. +kind: client +topics: + - ui + - orchestration +compat: n/a +tags: + - gui + - desktop + - client + - multi-agent + - cross-platform diff --git a/data/projects/argus-framework.yaml b/data/projects/argus-framework.yaml new file mode 100644 index 0000000..dfd6f81 --- /dev/null +++ b/data/projects/argus-framework.yaml @@ -0,0 +1,21 @@ +name: Argus +repo: https://github.com/tecnosor/argus-framework +homepage: https://github.com/tecnosor/argus-framework +tagline: Banking compliance SDLC framework for AI agents +description: Agent-agnostic framework that installs a complete banking compliance SDLC into any codebase. Deploys 5 specialized agents (Guardian, Compliance, Builder, Tester, Reviewer) to enforce GDPR, DORA, MiCA, PSD2, PCI-DSS and other regulations across the entire software lifecycle. +kind: tool +topics: + - domain + - security +compat: n/a +tags: + - compliance + - banking + - security + - agents + - sdlc + - opencode + - cursor + - windsurf + - cline + - aider diff --git a/data/projects/assay.yaml b/data/projects/assay.yaml new file mode 100644 index 0000000..3278128 --- /dev/null +++ b/data/projects/assay.yaml @@ -0,0 +1,9 @@ +name: assay +repo: https://github.com/awss1i/assay +tagline: Deterministic QA that drives every control on a web page and reports where it contradicts itself +description: assay opens a web page in Chromium through Playwright, drives every control it finds, and reports where the page contradicts itself. Runs are deterministic and use no LLM, so the same page gives the same result every time. For opencode you install its skill by copying checking-a-page into .opencode/skills/, and it tells the agent to run assay after it changes a page and report the result. MIT licensed, Python 3.10+, installed from PyPI as assay-ui. +kind: skill +topics: + - code-quality + - web +compat: n/a diff --git a/data/projects/ax.yaml b/data/projects/ax.yaml new file mode 100644 index 0000000..c6f321b --- /dev/null +++ b/data/projects/ax.yaml @@ -0,0 +1,8 @@ +name: ax +repo: https://github.com/Necmttn/ax +tagline: Local telemetry graph for AI coding agents +description: Local-first telemetry and taste graph for AI coding agents. Ingests OpenCode, Claude Code, Codex, Cursor, and Pi session data plus OTLP, then exposes recall, cost, skill/hook usage, churn, and workflow-extraction views through a CLI, dashboard, and MCP server. +kind: mcp-server +topics: + - observability +compat: n/a diff --git a/data/projects/axi-memory.yaml b/data/projects/axi-memory.yaml new file mode 100644 index 0000000..f70a194 --- /dev/null +++ b/data/projects/axi-memory.yaml @@ -0,0 +1,9 @@ +name: axi-memory (mem-axi) +repo: https://github.com/masculinecache/axi-memory +tagline: Filesystem + git agent memory CLI with TOON output +description: A bash CLI (@masculinecache/mem-axi) giving terminal coding agents durable cross-session memory stored as markdown + YAML frontmatter in a git repository — no daemon, no database, no lock-in. Adds are structured records (decision, howto, failure, constraint, preference) with confidence and priority, retrieved via ripgrep-backed keyword search over frontmatter; output follows the AXI 10 principles for agent ergonomics (TOON, minimal schemas, definitive empty states, structured errors, exit 0/1/2). Composable with OpenCode sessions as a memory bridge — skill entry points can route capture and recall through the same CLI, and dedicated never-write-secrets handling redacts common secret patterns from stored records. +kind: tool +topics: + - memory + - git +compat: n/a diff --git a/data/projects/azdaja.yaml b/data/projects/azdaja.yaml new file mode 100644 index 0000000..d2b0385 --- /dev/null +++ b/data/projects/azdaja.yaml @@ -0,0 +1,15 @@ +name: Azdaja +repo: https://github.com/kubet/azdaja +homepage: https://azdaja.dev +tagline: Local context evaluator for OpenCode with bounded semantic calls and validated results. +description: A Rust binary that keeps source material outside the root prompt, runs exact analysis in a local Python sandbox, and requests bounded semantic judgments through OpenCode when needed. +kind: tool +topics: + - context +compat: n/a +tags: + - cli + - large-context + - opencode + - receipts + - rust diff --git a/data/projects/beads.yaml b/data/projects/beads.yaml index c13a912..ab1e62f 100644 --- a/data/projects/beads.yaml +++ b/data/projects/beads.yaml @@ -1,4 +1,9 @@ name: Beads -repo: https://github.com/steveyegge/beads +repo: https://github.com/gastownhall/beads tagline: Project task management description: Steve Yegge's project/task management system for agents (with beads_viewer UI). +kind: tool +topics: + - workflow + - integrations +compat: n/a diff --git a/data/projects/bifrost.yaml b/data/projects/bifrost.yaml new file mode 100644 index 0000000..83c9600 --- /dev/null +++ b/data/projects/bifrost.yaml @@ -0,0 +1,15 @@ +name: Bifrost +repo: https://github.com/maximhq/bifrost +homepage: https://docs.getbifrost.ai/cli-agents/opencode +tagline: OpenCode gateway for multi-provider routing +description: Route OpenCode requests through Bifrost's OpenAI-compatible gateway with provider selection, virtual-key controls, and request logging. +kind: tool +topics: + - providers + - observability +compat: n/a +tags: + - gateway + - routing + - provider + - observability diff --git a/data/projects/brood-box.yaml b/data/projects/brood-box.yaml index a4f8b7d..5ba0cfe 100644 --- a/data/projects/brood-box.yaml +++ b/data/projects/brood-box.yaml @@ -2,3 +2,8 @@ name: brood-box repo: https://github.com/stacklok/brood-box tagline: Hardware-isolated microVMs for coding agents description: Run AI coding agents (Claude Code, Codex, OpenCode) inside hardware-isolated microVMs with snapshot isolation, egress control, and MCP authorization. +kind: tool +topics: + - security + - environment +compat: n/a diff --git a/data/projects/bx.yaml b/data/projects/bx.yaml index 7752af6..ba74b53 100644 --- a/data/projects/bx.yaml +++ b/data/projects/bx.yaml @@ -2,3 +2,7 @@ name: bx repo: https://github.com/holtwick/bx-mac tagline: macOS file-system sandbox for AI coding agents description: Launch OpenCode, VSCode, Claude Code, or any command in a macOS sandbox (sandbox-exec). Dynamically blocks access to everything except the project directory — no containers, no VMs, just one command. +kind: tool +topics: + - security +compat: n/a diff --git a/data/projects/call-me.yaml b/data/projects/call-me.yaml new file mode 100644 index 0000000..b5d08bc --- /dev/null +++ b/data/projects/call-me.yaml @@ -0,0 +1,34 @@ +name: /call-me +repo: https://github.com/radres/call-me +homepage: https://callmemcp.com +tagline: Let OpenCode ring your iPhone, read you a question and return your spoken answer +description: A hosted remote MCP server for OpenCode. The agent can ring your iPhone, read a question or status update aloud, and get your spoken reply back as text, or send you a text and wait for your answer. Useful when a long session needs a decision while you are away from the keyboard. Needs the /call-me iPhone app, which gives you the number the agent calls. +kind: mcp-server +topics: + - voice + - remote + - notifications +compat: n/a +scope: + - global + - project +tags: + - mcp + - phone + - notifications + - human-in-the-loop + - ios +installation: | + Install the /call-me iPhone app and open My Number. Then add the remote MCP server to `opencode.json` (or `~/.config/opencode/opencode.json`): + ```json + { + "mcp": { + "call-me": { + "type": "remote", + "url": "https://callmemcp.com/mcp", + "enabled": true + } + } + } + ``` + Tell the agent your 10-digit /call-me number, or ask it to call the `setup` tool. diff --git a/data/projects/calyx.yaml b/data/projects/calyx.yaml new file mode 100644 index 0000000..ff39813 --- /dev/null +++ b/data/projects/calyx.yaml @@ -0,0 +1,9 @@ +name: Calyx +repo: https://github.com/yuuichieguchi/Calyx +tagline: Native macOS terminal for running and supervising OpenCode and other coding agents in parallel +description: Calyx is an MIT-licensed native macOS terminal built on libghostty. It runs OpenCode alongside Claude Code, Codex, Hermes, Grok, and pi in parallel panes, shows each agent's status and subagents in a sidebar, lets you review diffs and send line comments back to the OpenCode pane, and provides a built-in MCP server for cross-pane messaging. +kind: client +topics: + - environment + - orchestration +compat: n/a diff --git a/data/projects/caprock.yaml b/data/projects/caprock.yaml new file mode 100644 index 0000000..48134e6 --- /dev/null +++ b/data/projects/caprock.yaml @@ -0,0 +1,9 @@ +name: Caprock +repo: https://github.com/dspv/caprock +tagline: Local dashboard showing OpenCode sessions next to Claude Code and Codex, with cost per repository +description: Reads OpenCode's own database read-only and shows its sessions on the same screens as Claude Code, Codex and DeepSeek Harness, with an all/opencode filter. Costs are shown as OpenCode reports them. Searchable history, single Go binary, no telemetry. +kind: client +topics: + - cost + - sessions +compat: n/a diff --git a/data/projects/chronotile.yaml b/data/projects/chronotile.yaml new file mode 100644 index 0000000..58b42e6 --- /dev/null +++ b/data/projects/chronotile.yaml @@ -0,0 +1,17 @@ +name: Chronotile +repo: https://github.com/xterr/chronotile +homepage: https://xterr.github.io/chronotile/ +tagline: Local usage analytics dashboard for OpenCode — cost, tokens, models, agents, tools, and sessions +description: Native desktop app (Tauri 2, Rust backend, React UI) that turns OpenCode's local SQLite history into a dashboard — spend, token breakdown including reasoning and cache, per-model, per-agent, per-tool and per-skill analytics, project and file activity, quota burn rate, a full-year spend heatmap, and a session browser with full transcripts. OpenCode records $0 for subscription and OAuth-plan traffic, so Chronotile also estimates cost from models.dev rates and shows reported and estimated figures side by side. Databases are opened read-only, an incremental rollup cache keeps queries instant on multi-gigabyte histories, and no usage data ever leaves your machine. +kind: client +topics: + - cost + - observability +compat: n/a +tags: + - analytics + - dashboard + - desktop + - cost-tracking + - token-usage + - tauri diff --git a/data/projects/claude-learn.yaml b/data/projects/claude-learn.yaml new file mode 100644 index 0000000..06d445b --- /dev/null +++ b/data/projects/claude-learn.yaml @@ -0,0 +1,9 @@ +name: Claude Learn +repo: https://github.com/OutcomeFocusAi/claude-learn +tagline: Self-improving behavioral playbook plugin for Claude Code +description: Self-improving behavioral playbook plugin for Claude Code. Captures corrections, failures, and discoveries as scored rules that strengthen or decay over sessions — a closed feedback loop for continuous improvement. +kind: skill +topics: + - prompting + - memory +compat: n/a diff --git a/data/projects/claudescope.yaml b/data/projects/claudescope.yaml new file mode 100644 index 0000000..7bee0b0 --- /dev/null +++ b/data/projects/claudescope.yaml @@ -0,0 +1,8 @@ +name: Claudescope +repo: https://github.com/vladar107/claudescope +tagline: Local, read-only web UI to browse, search, and analyze OpenCode (and other agents') sessions +description: Local-first CLI that serves a web UI to browse, read, search, and analyze AI coding-agent transcripts — OpenCode sessions alongside Claude Code, Codex, Junie, pi, and Copilot CLI. Sessions are merged by working directory; includes DuckDB full-text search and token-cost analytics. Read-only and cross-platform, distributed as a single npm package (MIT). +kind: client +topics: + - sessions +compat: n/a diff --git a/data/projects/claudex-switch.yaml b/data/projects/claudex-switch.yaml new file mode 100644 index 0000000..d9f213b --- /dev/null +++ b/data/projects/claudex-switch.yaml @@ -0,0 +1,9 @@ +name: claudex-switch +repo: https://github.com/Holden-Lin/claudex-switch +tagline: OpenCode V1 Go profiles share session history; experimental V2 profiles isolate credentials and history +description: "Source-available CLI for OpenCode V1 Go account aliases and provider-reported quotas. V1 profiles share normal session history; experimental V2 profiles keep credentials and SQLite history per alias. Also supports Claude Code and Codex. Licensed under MIT + Commons Clause v1.0: ordinary work use is allowed, but charging third parties for products or services whose value derives entirely or substantially from this tool requires separate permission." +kind: tool +topics: + - providers + - sessions +compat: n/a diff --git a/data/projects/claudexor.yaml b/data/projects/claudexor.yaml new file mode 100644 index 0000000..fd1a0c2 --- /dev/null +++ b/data/projects/claudexor.yaml @@ -0,0 +1,19 @@ +name: Claudexor +repo: https://github.com/razzant/claudexor +homepage: https://razzant.github.io/claudexor/ +tagline: Run OpenCode alongside Claude Code, Codex, and Cursor in one local-first control plane +description: A local-first control plane that runs OpenCode alongside Claude Code, Codex, and Cursor while keeping one Claudexor thread across harness lanes. Adds isolated workspaces, Best-of-N runs, cross-model review, and typed apply gates; quota-aware multi-subscription rotation is available for Claude Code and Codex. +kind: tool +topics: + - orchestration + - code-quality +compat: n/a +tags: + - orchestration + - multi-agent + - local-first + - code-review + - opencode +installation: | + npm install -g claudexor + claudexor doctor diff --git a/data/projects/clawmetry.yaml b/data/projects/clawmetry.yaml new file mode 100644 index 0000000..171492e --- /dev/null +++ b/data/projects/clawmetry.yaml @@ -0,0 +1,9 @@ +name: ClawMetry +repo: https://github.com/vivekchand/clawmetry +homepage: https://clawmetry.com +tagline: Zero-config observability dashboard for OpenCode and 20+ agent runtimes +description: Local web dashboard that auto-detects OpenCode session history and shows live sessions, token usage, costs, tool calls, and transcripts alongside 20+ other agent runtimes. One pip install, no configuration. +kind: client +topics: + - observability +compat: n/a diff --git a/data/projects/cli-proxy-api.yaml b/data/projects/cli-proxy-api.yaml index 1775d57..bd9f5ca 100644 --- a/data/projects/cli-proxy-api.yaml +++ b/data/projects/cli-proxy-api.yaml @@ -2,3 +2,7 @@ name: CLI Proxy API repo: https://github.com/router-for-me/CLIProxyAPI tagline: Multi-model proxy description: A proxy server providing compatible API interfaces for multiple model CLIs. +kind: tool +topics: + - providers +compat: n/a diff --git a/data/projects/cliproxy-rs.yaml b/data/projects/cliproxy-rs.yaml new file mode 100644 index 0000000..f4d0113 --- /dev/null +++ b/data/projects/cliproxy-rs.yaml @@ -0,0 +1,8 @@ +name: cliproxy-rs +repo: https://github.com/vayungodara/cliproxy-rs +tagline: Use your Claude and ChatGPT accounts in OpenCode through one local endpoint, with each account's limits on a dashboard +description: A Rust port of CLIProxyAPI. OpenCode points at it as an OpenAI-compatible custom provider, and it translates to the Anthropic, OpenAI and Gemini APIs while spreading requests across the accounts and API keys you already have. The built-in dashboard shows each Claude and Codex account's 5-hour and weekly limits. Reads CLIProxyAPI's config and auth files. MIT. +kind: tool +topics: + - providers +compat: n/a diff --git a/data/projects/codewalk.yaml b/data/projects/codewalk.yaml index 70d0546..9c0ca2a 100644 --- a/data/projects/codewalk.yaml +++ b/data/projects/codewalk.yaml @@ -2,3 +2,7 @@ name: CodeWalk repo: https://github.com/verseles/codewalk tagline: Native cross-platform Flutter client for OpenCode server mode description: A fast, native Flutter client for OpenCode server mode with realtime streaming chat, speech-to-text on all platforms, multi-server profiles, model selection, and a Material 3 responsive UI for Linux, macOS, Windows, Web, and Android. +kind: client +topics: + - remote +compat: n/a diff --git a/data/projects/codex-proxy-server.yaml b/data/projects/codex-proxy-server.yaml index 1b9db01..4e3a065 100644 --- a/data/projects/codex-proxy-server.yaml +++ b/data/projects/codex-proxy-server.yaml @@ -2,3 +2,7 @@ name: Codex Proxy Server repo: https://github.com/unluckyjori/Codex-Proxy-Server tagline: Local API proxy description: A proxy server that provides a local API proxy for Codex/ChatGPT-like models. +kind: tool +topics: + - providers +compat: n/a diff --git a/data/projects/cognitive-lead-hq.yaml b/data/projects/cognitive-lead-hq.yaml new file mode 100644 index 0000000..ff2a148 --- /dev/null +++ b/data/projects/cognitive-lead-hq.yaml @@ -0,0 +1,16 @@ +name: Cognitive Lead HQ +repo: https://github.com/mokhtarabadi/cognitive-lead-hq +homepage: https://mokhtarabadi.github.io/cognitive-lead-hq/ +tagline: OpenCode multi-agent HQ with Brain/Hands split, FastMCP and 31 skills +description: Documentation-only OpenCode HQ with Brain/Hands split, 3 FastMCP servers (context/memory/lint), Kanban ZAC workflow and 31 reusable skills. +kind: tool +topics: + - orchestration + - workflow +compat: n/a +tags: + - multi-agent + - mcp + - skills + - workflow + - opencode diff --git a/data/projects/comfanion-workflow.yaml b/data/projects/comfanion-workflow.yaml index dc8f1b6..08e9ff1 100644 --- a/data/projects/comfanion-workflow.yaml +++ b/data/projects/comfanion-workflow.yaml @@ -2,3 +2,8 @@ name: Comfanion Workflow repo: https://github.com/Comfanion/workflow tagline: AI-assisted development workflow with agents, skills, and semantic search description: Complete workflow system for AI-assisted development. Includes specialized agents (analyst, PM, architect, developer), reusable skills, slash commands, semantic code search with local vectorizer, and sprint management with Jira integration. +kind: skill +topics: + - workflow + - code-intel +compat: n/a diff --git a/data/projects/cortex.yaml b/data/projects/cortex.yaml new file mode 100644 index 0000000..ce1df79 --- /dev/null +++ b/data/projects/cortex.yaml @@ -0,0 +1,9 @@ +name: Cortex +repo: https://github.com/benogoulart/Cortex +tagline: Codebase intelligence engine for coding agents via MCP +description: Indexes your project into a structured knowledge graph of files, symbols and dependencies using tree-sitter AST parsing, and exposes it to OpenCode over MCP. Includes semantic search, dependency-graph context engine, architecture analysis, persistent project memory, task planning, and specialized agents (architect, reviewer, security, tester) producing unified reports. TypeScript, Node 22+, MIT. +kind: mcp-server +topics: + - code-intel + - context +compat: n/a diff --git a/data/projects/cowork-to-code-bridge.yaml b/data/projects/cowork-to-code-bridge.yaml new file mode 100644 index 0000000..d15eb6a --- /dev/null +++ b/data/projects/cowork-to-code-bridge.yaml @@ -0,0 +1,16 @@ +name: cowork-to-code-bridge +repo: https://github.com/abhinaykrupa/cowork-to-code-bridge +tagline: Run agent tasks on your own machine from a sandboxed caller, with no inbound port +description: "A local-first async bridge that lets an agent running somewhere else — a cloud sandbox, a container, a hosted chat session, a CI job — execute work on the developer's real machine. There is no network listener, no inbound port and no tunnel: a daemon watches a shared directory, the remote side drops a JSON task file in, and the daemon runs it locally and writes a result file back. Any shared folder works (bind mount, Syncthing, Dropbox, NFS). Execution is allow-listed — only scripts installed into the daemon's scripts directory can run, so a remote caller cannot request arbitrary shell. Tasks are non-blocking and cancellable (SIGTERM to the whole process group, then SIGKILL after a grace period), output is size-capped while streaming with truncation reported, and results carry real exit codes. Ships ~25 scripts (host health, disk, ports, docker ps/logs, git status, package updates), a wrapper that hands a whole task to a local CLI coding agent, and an MCP proxy that relays JSON-RPC to local stdio MCP servers. Python client, stdlib-only, MIT, macOS and Linux." +kind: tool +topics: + - remote + - security +compat: n/a +tags: + - bridge + - remote-execution + - sandbox + - local-first + - mcp + - cli diff --git a/data/projects/crit.yaml b/data/projects/crit.yaml new file mode 100644 index 0000000..5101d6e --- /dev/null +++ b/data/projects/crit.yaml @@ -0,0 +1,8 @@ +name: Crit +repo: https://github.com/tomasz-tomczyk/crit +tagline: Review OpenCode plans and diffs in a local browser UI and send comments back to the agent. +description: Crit opens agent plans, code diffs, HTML artifacts and a running dev server in a browser review UI. You leave inline comments and they go back to the agent as structured feedback. Ships an OpenCode plugin (v1 and v2) and skills. Runs locally as a single binary. +kind: client +topics: + - code-quality +compat: n/a diff --git a/data/projects/cupcake.yaml b/data/projects/cupcake.yaml index c061ebf..11399b4 100644 --- a/data/projects/cupcake.yaml +++ b/data/projects/cupcake.yaml @@ -2,3 +2,7 @@ name: Cupcake repo: https://github.com/eqtylab/cupcake tagline: Policy enforcement layer description: A native policy-layer for AI coding agents built on OPA/Rego with native OpenCode plugin support. +kind: tool +topics: + - security +compat: n/a diff --git a/data/projects/db-semantic-mcp.yaml b/data/projects/db-semantic-mcp.yaml new file mode 100644 index 0000000..deb257a --- /dev/null +++ b/data/projects/db-semantic-mcp.yaml @@ -0,0 +1,20 @@ +name: db-semantic-mcp +repo: https://github.com/chncaesar/db-semantic-mcp +tagline: Read-only PostgreSQL and SQL Server schema context for OpenCode agents +description: A local MCP server that gives OpenCode agents table and column metadata, database comments, bounded sample data with redaction controls, and optional semantic schema search. Supports PostgreSQL and SQL Server without arbitrary SQL execution or a vector database. +kind: mcp-server +topics: + - integrations + - context +compat: n/a +scope: + - global + - project +tags: + - mcp-server + - database + - postgresql + - sql-server + - schema +installation: | + Install with `pip install db-semantic-mcp`, set `DATABASE_URL`, and register the `pg-semantic-mcp` command as a local MCP server in `opencode.jsonc`. diff --git a/data/projects/deck.yaml b/data/projects/deck.yaml index 6551134..0312344 100644 --- a/data/projects/deck.yaml +++ b/data/projects/deck.yaml @@ -3,3 +3,8 @@ repo: https://github.com/cofy-x/deck homepage: https://deck.cofy-x.space tagline: Local cockpit for OpenCode-powered autonomous agents with secure sandboxes and live desktop visibility. description: Open-source desktop cockpit that runs OpenCode-integrated agents in isolated Docker sandboxes with chat plus live noVNC desktop monitoring, tool permission controls, and a Pilot bridge suite for orchestrating agents from Telegram, Slack, WhatsApp, and more. +kind: client +topics: + - security + - orchestration +compat: n/a diff --git a/data/projects/devintern.yaml b/data/projects/devintern.yaml new file mode 100644 index 0000000..e669f72 --- /dev/null +++ b/data/projects/devintern.yaml @@ -0,0 +1,15 @@ +name: DevIntern +repo: https://github.com/getdevintern/devintern +homepage: https://devintern.com +tagline: Turn tracker tickets into OpenCode-authored, self-reviewed pull requests +description: "Wires the task tracker your team already uses (Jira, Linear, Trello, Asana, Azure DevOps, GitHub Issues, or plain markdown files) to OpenCode. Running `devintern PROJ-123 --create-pr` picks up the ticket, runs OpenCode non-interactively in your repo, self-reviews the diff, and opens a pull request. A feasibility gate bounces vague tickets back to the tracker with questions instead of producing a confidently wrong PR. An optional unattended mode fully automates ticket handling: scheduled ticket pickup plus webhook-driven handling of PR review comments, so reviewer feedback becomes commits on the same branch. Includes a companion `devpm` tool that turns rough prompts, logs, or Figma frames into well-specified, codebase-grounded tickets. Runs on your machines with your own model keys." +kind: tool +topics: + - git + - integrations +compat: n/a +tags: + - automation + - task-tracker + - pull-requests + - opencode diff --git a/data/projects/dialbot-mcp.yaml b/data/projects/dialbot-mcp.yaml new file mode 100644 index 0000000..9f3601a --- /dev/null +++ b/data/projects/dialbot-mcp.yaml @@ -0,0 +1,29 @@ +name: Dialbot MCP +repo: https://github.com/R2100/dialbot-mcp +tagline: Local MCP browser control for OpenCode with an unpacked Chrome extension +description: Control Chrome tabs from OpenCode through a local stdio MCP server and a Chrome Manifest V3 extension. Includes fast DOM and selector actions, plus visual screenshot, mouse and keyboard control. Also works with Pi and other MCP stdio clients. +kind: mcp-server +topics: + - web +compat: n/a +scope: + - global + - project +tags: + - mcp + - browser-automation + - chrome + - windows +installation: | + Requires Windows, Google Chrome and Node.js 22 or later. + + 1. Clone https://github.com/R2100/dialbot-mcp to a stable local folder. + 2. Ask OpenCode: "Install Dialbot MCP from the cloned repository. Run npm run + setup, add it as a local stdio MCP server to my existing OpenCode config + without replacing other settings, and tell me to load the Chrome extension + unpacked from the repository's extension/ folder. Ask before running local + commands or editing configuration." + 3. In Chrome, enable Developer mode at chrome://extensions and choose Load + unpacked, selecting the repository's extension/ folder. + 4. Open the Dialbot MCP popup and click Connect. Verify with opencode mcp list + and a browser_tabs tool call. diff --git a/data/projects/djimitflo.yaml b/data/projects/djimitflo.yaml new file mode 100644 index 0000000..fe34a32 --- /dev/null +++ b/data/projects/djimitflo.yaml @@ -0,0 +1,15 @@ +name: djimitflo +repo: https://github.com/djimit/djimitflo +tagline: Djimit Agentic OS control plane with verified OpenCode executor integration +description: A TypeScript monorepo control plane for goal-driven autonomous loops, governance gates, and multi-runtime execution. Includes a verified OpenCode executor runtime, loop lifecycle management, maker/checker/security leases, and a dashboard for tracking goals and loop runs. +kind: tool +topics: + - orchestration + - workflow +compat: n/a +tags: + - agentic-os + - control-plane + - loops + - governance + - opencode diff --git a/data/projects/dotpals.yaml b/data/projects/dotpals.yaml new file mode 100644 index 0000000..bdf7d09 --- /dev/null +++ b/data/projects/dotpals.yaml @@ -0,0 +1,22 @@ +name: dotpals +repo: https://github.com/Rikinshah787/dotpals +tagline: A desktop pal and notch that shows what your OpenCode sessions did, in plain words +description: An open-source desktop companion that follows OpenCode through an OpenCode plugin and integrates with Claude Code, Codex, Cursor, Gemini CLI, and Copilot CLI through their respective hooks or local logs. Each request becomes a few readable with a live view of the file being edited in a notch at the top of the screen, and flags for .env changes, force-pushes and two agents editing the same file. Runs locally, no telemetry. +kind: client +topics: + - observability + - sessions +compat: n/a +scope: + - global +tags: + - plugin + - desktop + - activity + - monitoring + - multi-agent +installation: | + ```bash + npx --allow-git=all github:rikinshah787/dotpals setup + ``` + Then open the dashboard (`dotpals dashboard`) → **Agents** → **OpenCode** → **Connect**, which adds a small plugin to `~/.config/opencode/plugins/`. Restart OpenCode to load it. diff --git a/data/projects/dsh-movein.yaml b/data/projects/dsh-movein.yaml new file mode 100644 index 0000000..195d577 --- /dev/null +++ b/data/projects/dsh-movein.yaml @@ -0,0 +1,13 @@ +name: dsh-movein +repo: https://github.com/sjh9714/dsh-movein +tagline: Preview and move OpenCode setup into DeepSeek Harness +description: Preview and migrate global and project OpenCode configuration into DeepSeek Harness. Handles JSONC precedence, singular and plural asset directories, inline agents and commands, local and remote MCP servers, disabled entries, and environment placeholders without copying secret values. +kind: tool +topics: + - environment +compat: n/a +tags: + - migration + - configuration + - mcp + - skills diff --git a/data/projects/dsh-skills-anywhere.yaml b/data/projects/dsh-skills-anywhere.yaml new file mode 100644 index 0000000..9726f20 --- /dev/null +++ b/data/projects/dsh-skills-anywhere.yaml @@ -0,0 +1,8 @@ +name: dsh-skills-anywhere +repo: https://github.com/noteflowai/dsh-skills-anywhere +tagline: Serve the skills installed for 60+ agents to OpenCode over MCP, zero copies +description: MCP server that reads the Agent Skills (SKILL.md) already installed for OpenCode, Claude Code, Codex, Cursor, Gemini CLI and 60+ other agents, plus Claude Code plugin marketplaces and any GitHub skills repo, and exposes them as find_skills/open_skill tools and skill:// resources without copying or symlinking. +kind: mcp-server +topics: + - prompting +compat: n/a diff --git a/data/projects/duplex.yaml b/data/projects/duplex.yaml new file mode 100644 index 0000000..0884969 --- /dev/null +++ b/data/projects/duplex.yaml @@ -0,0 +1,42 @@ +name: Duplex +repo: https://github.com/Eric-huang799/duplex +tagline: A browser shared by a human and an AI — same tabs, same live session +description: Electron desktop browser with a bundled stdio MCP bridge (24 tools — snapshot, click, type, screenshot, tabs, annotations) plus an opencode mirror plugin that streams session events into a side panel and injects panel messages back into the same session. Built-in multi-protocol model support (OpenAI / Anthropic / Responses / Gemini) and an Esc takeover for the human. +kind: client +topics: + - sessions + - web +compat: n/a +scope: + - global +tags: + - browser + - mcp + - mirror + - automation + - electron +installation: | + ## Install the Duplex app + Download the installer for Windows / macOS / Linux from the + [Releases](https://github.com/Eric-huang799/duplex/releases) page (or build from source). + + ## Install the opencode mirror plugin + ```bash + mkdir -p ~/.config/opencode/plugins + curl -o ~/.config/opencode/plugins/cobrowse-mirror.ts \ + https://raw.githubusercontent.com/Eric-huang799/duplex/master/integrations/opencode/plugins/cobrowse-mirror.ts + ``` + + ## Register the MCP server + Add to `opencode.json` (project-level or global — see `opencode.example.json`): + ```json + { + "mcp": { + "duplex": { + "type": "local", + "command": ["node", "/path/to/duplex/dist-bridge/index.cjs"], + "enabled": true + } + } + } + ``` diff --git a/data/projects/employed.yaml b/data/projects/employed.yaml new file mode 100644 index 0000000..9a9a24b --- /dev/null +++ b/data/projects/employed.yaml @@ -0,0 +1,27 @@ +name: Employed by Guaq AI +repo: https://github.com/Guaq-AI/employed-plugins +homepage: https://jobs.guaqai.me/connectors +tagline: Live job search MCP server and skills for OpenCode, from about 5,000 verified employer ATS boards +description: Remote MCP server plus Agent Skills for searching live job postings read from employers' own applicant-tracking systems, researching an employer's hiring and tracking applications. Signs in with OAuth through opencode mcp auth, so no API key is needed. Every result links to the employer's own apply page. +kind: mcp-server +topics: + - domain +compat: n/a +scope: + - global + - project +tags: + - mcp + - skills + - jobs +installation: | + Add the server to `opencode.json`, then run `opencode mcp auth employed` to sign in: + + ```json + { + "$schema": "https://opencode.ai/config.json", + "mcp": { "employed": { "type": "remote", "url": "https://jobs.guaqai.me/mcp" } } + } + ``` + + For the job-search skills, copy the repository's `skills/*` into `.agents/skills/`. diff --git a/data/projects/eval-harness.yaml b/data/projects/eval-harness.yaml index 0a5a33c..559473e 100644 --- a/data/projects/eval-harness.yaml +++ b/data/projects/eval-harness.yaml @@ -2,3 +2,8 @@ name: eval-harness repo: https://github.com/nano-step/eval-harness tagline: Behavior-regression testing for OpenCode skills description: Detects when an OpenCode skill's behavior drifts from a baseline, attributes the cause across 4 classes (skill change / fixture stale / model change / unknown drift), and emits a 6-field FAIL schema with transcript-span and env-delta evidence. Ships a git pre-push hook, a composite GitHub Action, and a $-cost hard ceiling for CI safety. Bash + jq + python3 stdlib only; no daemon, no SaaS. MIT. +kind: tool +topics: + - code-quality + - prompting +compat: n/a diff --git a/data/projects/foreman.yaml b/data/projects/foreman.yaml new file mode 100644 index 0000000..e228985 --- /dev/null +++ b/data/projects/foreman.yaml @@ -0,0 +1,23 @@ +name: Foreman +repo: https://github.com/thruwire/foreman +homepage: https://github.com/thruwire/foreman/blob/main/docs/workers.md +tagline: Jev-powered agent supervisor for OpenCode workers +description: Runs OpenCode workers through opencode run while TypeSafe AI's Jev independently assesses requirements, implementation completion, tests, progress, and human escalation. Foreman can continue, stop, retry, or launch independent verification workers. The OpenCode backend supports stop/retry interventions. +kind: tool +topics: + - orchestration + - code-quality +compat: n/a +tags: + - supervision + - orchestration + - verification + - jev +installation: |- + Install foreman-core with pipx and make sure the OpenCode CLI is on PATH. + Set TYPESAFE_API_KEY in the environment or ~/.foreman/.env. + + ```bash + pipx install foreman-core + FOREMAN_WORKER_BACKEND=opencode foreman run --repo ./my-project --job "Add request retries" + ``` diff --git a/data/projects/forgeo.yaml b/data/projects/forgeo.yaml new file mode 100644 index 0000000..582c5d4 --- /dev/null +++ b/data/projects/forgeo.yaml @@ -0,0 +1,16 @@ +name: Forgeo +repo: https://github.com/lucaGazzola/forgeo +homepage: https://forgeo.org +tagline: Scheduled software factory that runs your coding agent on a backlog +description: A scheduled, agent-driven software factory for a repository. Keep a plain JSON backlog of tasks and Forgeo runs your configured coding agent (opencode, Claude Code, Codex, or any CLI) on each one, commits the result to the default branch, and runs a refactoring pass when the backlog is empty. Pauses and writes BLOCKER.md when the agent needs a human decision, with a web dashboard for every instance. +kind: tool +topics: + - orchestration + - workflow +compat: n/a +tags: + - orchestration + - automation + - backlog + - scheduling + - cli diff --git a/data/projects/fractal.yaml b/data/projects/fractal.yaml new file mode 100644 index 0000000..473208a --- /dev/null +++ b/data/projects/fractal.yaml @@ -0,0 +1,9 @@ +name: fractal +repo: https://github.com/plasma-ai/fractal +tagline: Hierarchical coding-agent loops with recursive delegation and per-node worktrees +description: Supports OpenCode as one of five coding-agent backends. Each node runs in its own Git worktree, delegates separable subtasks recursively, and records state and cost data in a local SQLite database with live terminal controls. +kind: tool +topics: + - orchestration + - git +compat: n/a diff --git a/data/projects/gemini-cli-to-api.yaml b/data/projects/gemini-cli-to-api.yaml index 04dfdb9..a29bfeb 100644 --- a/data/projects/gemini-cli-to-api.yaml +++ b/data/projects/gemini-cli-to-api.yaml @@ -2,3 +2,7 @@ name: Gemini CLI to API repo: https://github.com/gzzhongqi/geminicli2api tagline: Gemini proxy description: A proxy that converts the Gemini CLI tool into OpenAI-compatible endpoints. +kind: tool +topics: + - providers +compat: n/a diff --git a/data/projects/geneseed.yaml b/data/projects/geneseed.yaml new file mode 100644 index 0000000..913622d --- /dev/null +++ b/data/projects/geneseed.yaml @@ -0,0 +1,23 @@ +name: Geneseed +repo: https://github.com/Arylmera/Geneseed +npm: geneseed +homepage: https://www.npmjs.com/package/geneseed +tagline: Compiles a disciplined agent harness for OpenCode - laws enforced by plugins at the tool boundary +description: One source renders into a ready-made OpenCode harness - a constitution of laws and doctrines, 18 capability agents, 47 native skills, a memory convention and 7 plugins that hard-block force-pushes, reset --hard and credentials written into tracked files before the tool runs. Install once globally and every repo inherits it; 14 themes change only the voice. Zero runtime dependencies. Also emits for Claude Code, Bob, OpenClaude and plain AGENT.md tools. +kind: tool +topics: + - workflow +compat: n/a +scope: + - global + - project +tags: + - harness + - agents + - skills + - plugins + - guardrails + - memory +installation: | + npx geneseed setup + # choose "OpenCode global" so every repo inherits it diff --git a/data/projects/goblin-dmt.yaml b/data/projects/goblin-dmt.yaml new file mode 100644 index 0000000..03cfb58 --- /dev/null +++ b/data/projects/goblin-dmt.yaml @@ -0,0 +1,8 @@ +name: Goblin-D.M.T. +repo: https://github.com/es-3581100/Goblin-D.M.T. +tagline: Model-agnostic OpenCode runtime for bounded exploration, evidence-driven decisions, and user-gated execution. +description: An actor-driven OpenCode control runtime that turns model exploration, branching, uncertainty, and tool use into bounded work with lazy skill routing, persistent state, evidence-driven decisions, verification, checkpointing, and user-gated execution. +kind: agent +topics: + - workflow +compat: v2 diff --git a/data/projects/golembot.yaml b/data/projects/golembot.yaml index 76d7011..9d97634 100644 --- a/data/projects/golembot.yaml +++ b/data/projects/golembot.yaml @@ -2,3 +2,8 @@ name: GolemBot repo: https://github.com/0xranx/golembot tagline: Unified AI assistant framework for multiple Coding Agent CLIs description: Wraps Claude Code, Cursor, OpenCode, and Codex behind a single API with a Skill system, IM channel adapters (Feishu/Slack/Telegram/Discord), fleet mode, and an interactive onboard wizard. +kind: tool +topics: + - remote + - orchestration +compat: n/a diff --git a/data/projects/goodmemory.yaml b/data/projects/goodmemory.yaml new file mode 100644 index 0000000..8a5dc1c --- /dev/null +++ b/data/projects/goodmemory.yaml @@ -0,0 +1,24 @@ +name: GoodMemory +repo: https://github.com/hjqcan/GoodMemory +homepage: https://github.com/hjqcan/GoodMemory +tagline: Local-first, auditable memory for OpenCode through MCP +description: Gives OpenCode durable user and project memory across sessions through a standalone MCP server. Uses SQLite by default, keeps recall inspectable, and makes memory writes opt-in. +kind: mcp-server +topics: + - memory + - observability +compat: n/a +scope: + - global + - project +tags: + - mcp + - memory + - local-first + - opencode + - ai-agents +installation: | + npm install -g goodmemory@0.7.2 + + Add the `mcp.goodmemory` block from the OpenCode setup guide: + https://github.com/hjqcan/GoodMemory/blob/main/docs/GoodMemory-OpenCode-Setup-Guide.md diff --git a/data/projects/growth-architect-foundry.yaml b/data/projects/growth-architect-foundry.yaml new file mode 100644 index 0000000..a994e1f --- /dev/null +++ b/data/projects/growth-architect-foundry.yaml @@ -0,0 +1,8 @@ +name: growth-architect-foundry +repo: https://github.com/mohamedOmar11111/growth-architect-foundry +tagline: "Ad-agency growth ops skill for OpenCode: audits, client reports, ROAS maths, human-approved live writes" +description: Deterministic growth-ops commands for ad agencies (audit, diagnose, EN/AR client reports, COD-aware economics) as an Agent Skill plus AGENTS.md. Live Google/Meta budget or pause changes are enforced in code to need a person typing the campaign key at a terminal, so an agent cannot self-approve. Installs into .agents/skills with one script and is checked against the real OpenCode CLI in CI. +kind: skill +topics: + - domain +compat: n/a diff --git a/data/projects/handy.yaml b/data/projects/handy.yaml index 8ba893a..fcaea9d 100644 --- a/data/projects/handy.yaml +++ b/data/projects/handy.yaml @@ -2,3 +2,7 @@ name: Handy repo: https://github.com/cjpais/Handy tagline: Speech to Text description: Easy Open Source Speech to Text. +kind: client +topics: + - voice +compat: n/a diff --git a/data/projects/hcom.yaml b/data/projects/hcom.yaml index 9c41572..50ab6bb 100644 --- a/data/projects/hcom.yaml +++ b/data/projects/hcom.yaml @@ -2,3 +2,8 @@ name: hcom repo: https://github.com/aannoo/hcom tagline: Let AI agents message, watch, and spawn each other across terminals description: Claude Code, Gemini CLI, Codex CLI, and OpenCode agents in separate terminals can message each other, detect file edit collisions, read transcripts, view terminal screens, subscribe to activity, and spawn/fork/resume agents. First-class OpenCode support with native plugin. Includes TUI dashboard, cross-device relay, Python API, and multi-agent workflow scripts. pip installable, MIT licensed. +kind: tool +topics: + - orchestration + - environment +compat: v2 diff --git a/data/projects/herdr-reviewr.yaml b/data/projects/herdr-reviewr.yaml new file mode 100644 index 0000000..e4a86a3 --- /dev/null +++ b/data/projects/herdr-reviewr.yaml @@ -0,0 +1,9 @@ +name: herdr-reviewr +repo: https://github.com/persiyanov/herdr-reviewr +tagline: Review your coding agent's diff in a terminal pane and send line comments back to OpenCode +description: A terminal code-review pane that runs beside OpenCode in herdr. Read the agent's diff, comment on lines or ranges, and send the comments straight back to the agent's input. Also works with Claude Code, Codex and Pi. +kind: tool +topics: + - code-quality + - environment +compat: n/a diff --git a/data/projects/hexis.yaml b/data/projects/hexis.yaml new file mode 100644 index 0000000..fb591bb --- /dev/null +++ b/data/projects/hexis.yaml @@ -0,0 +1,9 @@ +name: Hexis +repo: https://github.com/Bevel-Software/Hexis +tagline: Git-backed skills, tools, and context for OpenCode +description: Manages shared agent skills, tool access, and context in Git, then makes approved resources available to OpenCode through a remote OAuth MCP connection. +kind: tool +topics: + - context + - git +compat: n/a diff --git a/data/projects/heym.yaml b/data/projects/heym.yaml new file mode 100644 index 0000000..432575f --- /dev/null +++ b/data/projects/heym.yaml @@ -0,0 +1,15 @@ +name: Heym +repo: https://github.com/heymrun/heym +homepage: https://heym.run/ +tagline: Visual AI workflows with OpenCode coding agents and Go usage tracking +description: Heym is a source available AI workflow platform you can self host. Its OpenCode Go node runs the OpenCode CLI against GitHub repositories and can return patches or open pull requests. It also provides native OpenCode Go credentials, live model selection, and subscription usage tracking. +kind: client +topics: + - workflow + - ui +compat: n/a +tags: + - workflows + - automation + - coding-agents + - self-hosted diff --git a/data/projects/hipocampo.yaml b/data/projects/hipocampo.yaml index 56231d2..320d5b5 100644 --- a/data/projects/hipocampo.yaml +++ b/data/projects/hipocampo.yaml @@ -2,3 +2,7 @@ name: Hipocampo repo: https://github.com/carrasquelalex1/hipocampo tagline: Dual memory system with BIRE search for AI agents description: A dual-memory system (PostgreSQL + pgvector + Gemini Embeddings) for AI coding agents. Implements the BIRE algorithm (Búsqueda Integrada por Relevancia Expansiva) — unified semantic + lexical search with auto-tagging, hybrid scoring, GIN trigram indexes, and cross-system 768d embeddings. Ships as an opencode skill with SKILL.md, Python scripts, and full DDL schema. +kind: skill +topics: + - memory +compat: n/a diff --git a/data/projects/hivemind.yaml b/data/projects/hivemind.yaml new file mode 100644 index 0000000..28cba99 --- /dev/null +++ b/data/projects/hivemind.yaml @@ -0,0 +1,17 @@ +name: Hivemind +repo: https://github.com/Hanishchow/hivemind +tagline: Delegate grunt work to headless opencode worker swarms while your main agent plans and reviews +description: Runs opencode as a disposable worker fleet driven by a planning agent. Every worker returns exactly one compact JSON line (result, tokens, cost, duration), so raw agent streams never flood the orchestrator's context. Writing workers each get their own git worktree so parallel edits cannot corrupt each other, and an explicit fallback ladder retries once, then falls back to the orchestrator doing the subtask itself, so a swarm never fails a task a single agent could have finished. Ships scout, coder and tester agent definitions plus slash commands for parallel review panels, research sweeps, batched migrations and partitioned test runs. +kind: tool +topics: + - orchestration + - code-quality +compat: n/a +scope: + - global +tags: + - orchestration + - multi-agent + - swarm + - claude-code + - automation diff --git a/data/projects/infiknit.yaml b/data/projects/infiknit.yaml new file mode 100644 index 0000000..5170ade --- /dev/null +++ b/data/projects/infiknit.yaml @@ -0,0 +1,22 @@ +name: Infiknit +repo: https://github.com/Synthenova/infiknit-mcp +homepage: https://infiknit.app +tagline: Local stdio launcher for Infiknit desktop image and video canvas workflows +description: Connect OpenCode to Infiknit on this computer. Generate images and videos into a project or build canvas workflows. Keep Infiknit open. Cloud agents cannot reach it. Official registry io.github.Synthenova/infiknit. +kind: client +topics: + - media +compat: n/a +installation: | + Keep Infiknit open, then add a local stdio MCP server: + + { + "mcp": { + "Infiknit": { + "type": "local", + "command": ["node", "plugins/infiknit/bin/infiknit-mcp.cjs"] + } + } + } + + Clone https://github.com/Synthenova/infiknit-mcp and point the command at that launcher. Do not use a remote 127.0.0.1 URL. diff --git a/data/projects/intentic.yaml b/data/projects/intentic.yaml new file mode 100644 index 0000000..7bfc10c --- /dev/null +++ b/data/projects/intentic.yaml @@ -0,0 +1,9 @@ +name: intentic +repo: https://github.com/intentic/intentic +tagline: Self-hosted browser workspace that runs OpenCode agents in parallel sandboxes +description: A browser workspace for running coding agents on hardware you own, with OpenCode connected over ACP as a chat provider. Each agent gets its own Docker sandbox and git worktree, terminals survive disconnects, any browser or phone reopens the same fleet, and every change is reviewed as a per-file, per-hunk diff before it lands. +kind: client +topics: + - security + - orchestration +compat: n/a diff --git a/data/projects/ivy-tendril.yaml b/data/projects/ivy-tendril.yaml new file mode 100644 index 0000000..b7c354f --- /dev/null +++ b/data/projects/ivy-tendril.yaml @@ -0,0 +1,16 @@ +name: Ivy Tendril +repo: https://github.com/Ivy-Interactive/Ivy-Tendril +homepage: https://tendril.ivy.app +tagline: AI coding orchestrator with plan-based lifecycle and verification gates +description: Open-source desktop app that orchestrates OpenCode, Claude Code, Codex, Antigravity, and Copilot through a structured plan-based lifecycle. Features verification gates, self-improving memory, human-in-the-loop checkpoints, and git worktree isolation. Local-first, agent-agnostic, stack-agnostic. +kind: client +topics: + - orchestration + - workflow + - code-quality +compat: n/a +tags: + - orchestration + - multi-agent + - desktop + - worktree diff --git a/data/projects/jailoc.yaml b/data/projects/jailoc.yaml index d053616..17f8151 100644 --- a/data/projects/jailoc.yaml +++ b/data/projects/jailoc.yaml @@ -1,8 +1,9 @@ name: jailoc repo: https://github.com/seznam/jailoc tagline: Sandboxed Docker environments for OpenCode agents -description: > - CLI tool that wraps OpenCode agents in isolated Docker Compose environments - with file isolation (bind-mounted workspaces only), network isolation - (private subnets blocked by default with host allowlisting), and a - per-workspace DinD sidecar. Zero config to start. +description: CLI tool that wraps OpenCode agents in isolated Docker Compose environments with file isolation (bind-mounted workspaces only), network isolation (private subnets blocked by default with host allowlisting), and a per-workspace DinD sidecar. Zero config to start. +kind: tool +topics: + - security + - environment +compat: n/a diff --git a/data/projects/justsessions.yaml b/data/projects/justsessions.yaml new file mode 100644 index 0000000..772c604 --- /dev/null +++ b/data/projects/justsessions.yaml @@ -0,0 +1,8 @@ +name: JustSessions +repo: https://github.com/yangzichao/JustSessions +tagline: Native Mac workspace for finding, reading, and resuming OpenCode sessions. +description: Groups OpenCode and other coding-agent sessions by project, with searchable conversation history and embedded terminals that preserve the original CLI. Requires macOS 14 or later, Apple Silicon, and an installed, authenticated CLI. +kind: client +topics: + - sessions +compat: n/a diff --git a/data/projects/kimaki.yaml b/data/projects/kimaki.yaml index 50a064c..89f7e74 100644 --- a/data/projects/kimaki.yaml +++ b/data/projects/kimaki.yaml @@ -2,3 +2,7 @@ name: Kimaki repo: https://github.com/remorses/kimaki/ tagline: Discord bot controller description: A Discord bot to control opencode sessions on any computer via Discord. +kind: client +topics: + - remote +compat: n/a diff --git a/data/projects/kranz.yaml b/data/projects/kranz.yaml new file mode 100644 index 0000000..61299a2 --- /dev/null +++ b/data/projects/kranz.yaml @@ -0,0 +1,10 @@ +name: Kranz +repo: https://github.com/kranz-org/kranz +homepage: https://kranz-org.github.io/kranz/guide/mcp +tagline: Inspect and control live development services from OpenCode over MCP +description: Kranz runs local development stacks with a terminal UI and CLI. Its built-in stdio MCP server lets OpenCode inspect services, readiness, logs, ports, actions, and run history, then perform authorized lifecycle operations against the same live runtime. The companion kranz-services Agent Skill teaches the agent to reuse existing runtimes and preview scoped changes. +kind: mcp-server +topics: + - environment + - observability +compat: n/a diff --git a/data/projects/lians.yaml b/data/projects/lians.yaml new file mode 100644 index 0000000..570fb41 --- /dev/null +++ b/data/projects/lians.yaml @@ -0,0 +1,13 @@ +name: Lians +repo: https://github.com/Lians-ai/Lians +tagline: Local-first memory for OpenCode and any MCP-compatible AI agent +description: Gives OpenCode durable memory across chats through its native MCP support. Ships a ready-to-copy OpenCode configuration and five-tool starter profile for remembering, recalling, inspecting, correcting, and explicitly erasing local memory. No Lians account, API key, model download, or cloud service is required; memory stays in a local SQLite database and can be shared with other compatible agents. +kind: mcp-server +topics: + - memory +compat: n/a +tags: + - memory + - mcp + - persistence + - local-first diff --git a/data/projects/llm-panel.yaml b/data/projects/llm-panel.yaml new file mode 100644 index 0000000..4180ba2 --- /dev/null +++ b/data/projects/llm-panel.yaml @@ -0,0 +1,15 @@ +name: llm-panel +repo: https://github.com/musharna/llm-panel +homepage: https://pypi.org/project/llm-panel/ +tagline: Put one question or diff to several LLM CLIs in parallel — opencode runs as a verified read-only agent +description: Put one question or diff to several LLM CLIs in parallel — opencode judges run as a verified read-only agent alongside codex, claude and ollama — with every answer shown in full, an anonymised rebuttal round, cost accounting, a GitHub Action, and a measured miss rate on AACR-Bench. +kind: tool +topics: + - code-quality + - orchestration +compat: n/a +tags: + - cli + - code-review + - multi-model + - opencode diff --git a/data/projects/looptroop.yaml b/data/projects/looptroop.yaml new file mode 100644 index 0000000..820ab2e --- /dev/null +++ b/data/projects/looptroop.yaml @@ -0,0 +1,17 @@ +name: LoopTroop +repo: https://github.com/looptroop-ai/LoopTroop +homepage: https://www.looptroop.ovh/ +tagline: Local GUI orchestrator for autonomous AI coding using multi-model planning councils and isolated worktrees +description: Local-first, open-source GUI orchestrator that runs long-running AI coding tickets end-to-end. An LLM Council plans the work, tasks are decomposed into atomic units (Beads) executed in isolated git worktrees, and a Ralph Loop recovers from errors with a fresh context. Built on OpenCode. +kind: client +topics: + - context + - orchestration + - workflow +compat: v1 +tags: + - orchestration + - multi-agent + - context-engineering + - local-first + - opencode diff --git a/data/projects/magents.yaml b/data/projects/magents.yaml new file mode 100644 index 0000000..6527878 --- /dev/null +++ b/data/projects/magents.yaml @@ -0,0 +1,9 @@ +name: magents +repo: https://github.com/abnegate/magents +tagline: Read, hand off to, message, and spawn OpenCode, Claude Code, Codex, Cursor, and Gemini sessions from one MCP server +description: Rust MCP server and CLI over the session files coding agents already write. From OpenCode you can list and read other live sessions, search transcripts, hand off compact state into another chat, send into a specific session, or spawn an independent headless session that replies through a shared inbox. Reads OpenCode's session database directly; `magents install --all` registers the MCP server in opencode.json and adds the magents skill. Homebrew, APT, binaries, and Docker. MIT licensed. +kind: mcp-server +topics: + - orchestration + - sessions +compat: n/a diff --git a/data/projects/mcp-voice-interface.yaml b/data/projects/mcp-voice-interface.yaml index bd09507..906818a 100644 --- a/data/projects/mcp-voice-interface.yaml +++ b/data/projects/mcp-voice-interface.yaml @@ -1,4 +1,10 @@ name: MCP Voice Interface -repo: https://github.com/shantur/mcp-voice-interface +repo: https://github.com/shantur/jarvis-mcp tagline: Talk to AI assistants description: Talk to AI assistants using your voice through a web browser. Compatible with Claude Desktop and opencode. +kind: client +also: + - mcp-server +topics: + - voice +compat: v1 diff --git a/data/projects/mimo-code.yaml b/data/projects/mimo-code.yaml new file mode 100644 index 0000000..7b83956 --- /dev/null +++ b/data/projects/mimo-code.yaml @@ -0,0 +1,19 @@ +name: MiMo-Code +repo: https://github.com/shin4/mio +homepage: https://shin4.github.io/mimo-code/ +tagline: Voice-driven multimodal desktop coding agent for MiMo +description: A native desktop coding agent for the MiMo model family — Windows & macOS, no TUI — built on the OpenCode harness and adapted to be MiMo-first. Adds native multimodal understanding (image, PDF, video) plus voice dictation (ASR) and speech synthesis (TTS), with cost-aware model selection. +kind: client +topics: + - ui + - voice +compat: n/a +tags: + - desktop + - gui + - opencode + - multimodal + - voice + - asr + - tts + - mimo diff --git a/data/projects/mnemoverse.yaml b/data/projects/mnemoverse.yaml new file mode 100644 index 0000000..bbf3deb --- /dev/null +++ b/data/projects/mnemoverse.yaml @@ -0,0 +1,13 @@ +name: Mnemoverse +repo: https://github.com/mnemoverse/mcp-memory-server +homepage: https://mnemoverse.com/docs/api/remote-mcp-server +tagline: MCP memory server that re-ranks recall from reported outcomes, backed by a hosted engine +description: MIT-licensed MCP server for agent memory, backed by a hosted engine that re-ranks recall from reported outcomes rather than similarity alone. OpenCode can use it as a local MCP server (npm `@mnemoverse/mcp-memory-server`) or as a remote MCP server at https://mcp.mnemoverse.com/mcp with OAuth sign-in, and the same memory is shared with Claude Code, Cursor, VS Code, and ChatGPT. The engine is hosted and needs a Mnemoverse account, with a free tier. +kind: mcp-server +topics: + - memory +compat: n/a +tags: + - mcp + - memory + - opencode diff --git a/data/projects/myc.yaml b/data/projects/myc.yaml new file mode 100644 index 0000000..88836ff --- /dev/null +++ b/data/projects/myc.yaml @@ -0,0 +1,9 @@ +name: myc +repo: https://github.com/aistastudio/myc +tagline: Local task queue and decision memory for coding agents, wired into opencode with one command +description: A local task-and-memory layer for coding agents (opencode, Claude Code, Codex, Kimi). One SQLite file next to the repo holds a task queue with dependencies, blockers and atomic claims, an oplog of decisions with hybrid search, and a code index; `myc wire` installs the opencode plugin and MCP server. No network calls of its own, no API key, MIT. +kind: mcp-server +topics: + - memory + - workflow +compat: n/a diff --git a/data/projects/nextprob.yaml b/data/projects/nextprob.yaml index 917b9c9..fbc47a0 100644 --- a/data/projects/nextprob.yaml +++ b/data/projects/nextprob.yaml @@ -2,3 +2,7 @@ name: NextProb repo: https://github.com/NextProb/nextprob tagline: Desktop notebook for vibe-coded websites, edited by your local AI coding-agent CLI (OpenCode and others) description: Electron desktop app that turns a workspace folder of plain .html files into an AI-editable notebook. Agent-agnostic — edit notes with OpenCode or any other agent CLI in an embedded terminal. Notes are real HTML pages. Each note is a self-contained folder that can include a SQLite database, key/value store, attached files, and scripts — so it can grow from a static page into a sortable table, interactive dashboard, or research tool. +kind: client +topics: + - workflow +compat: n/a diff --git a/data/projects/nsq.yaml b/data/projects/nsq.yaml new file mode 100644 index 0000000..b6768cd --- /dev/null +++ b/data/projects/nsq.yaml @@ -0,0 +1,9 @@ +name: nsq +repo: https://github.com/glmn-ai/neurosquad-cli +tagline: Run OpenCode, Claude Code and Codex side by side in one terminal and see which one needs you +description: Open-source CLI that runs OpenCode (1.x and 2.x), Claude Code, Codex or any command side by side in one terminal. Status comes from each CLI's own events (working / needs you, with the question / finished), and a permission prompt can be answered y/a/n without opening the agent. A daemon keeps agents alive when the terminal closes, each agent can get its own git worktree, and cost is tracked per agent. Never writes to opencode.json; each session gets its own config layer. OpenRouter and local model servers supported. No account, no telemetry. MIT, `npx neurosquad`. +kind: tool +topics: + - environment + - orchestration +compat: n/a diff --git a/data/projects/oc-context-occtx.yaml b/data/projects/oc-context-occtx.yaml index bfbb4c7..8639a19 100644 --- a/data/projects/oc-context-occtx.yaml +++ b/data/projects/oc-context-occtx.yaml @@ -2,3 +2,7 @@ name: OC Context (occtx) repo: https://github.com/hungthai1401/occtx tagline: Switch contexts quickly description: A command-line tool for switching between different opencode contexts quickly. +kind: tool +topics: + - environment +compat: n/a diff --git a/data/projects/oc-manager.yaml b/data/projects/oc-manager.yaml index 7f2fe14..bd4d674 100644 --- a/data/projects/oc-manager.yaml +++ b/data/projects/oc-manager.yaml @@ -1,4 +1,9 @@ name: OC Manager -repo: https://github.com/kcrommett/oc-manager +repo: https://github.com/shuv1337/oc-manager tagline: Metadata TUI description: Terminal UI for inspecting, filtering, and pruning OpenCode metadata stored on disk. +kind: client +topics: + - sessions + - ui +compat: n/a diff --git a/data/projects/oc-monitor-share.yaml b/data/projects/oc-monitor-share.yaml index bca7c11..a757819 100644 --- a/data/projects/oc-monitor-share.yaml +++ b/data/projects/oc-monitor-share.yaml @@ -2,3 +2,7 @@ name: OC Monitor Share repo: https://github.com/Shlomob/ocmonitor-share tagline: CLI monitoring tool description: A CLI tool for monitoring and analysing opencode AI coding usage. +kind: tool +topics: + - observability +compat: n/a diff --git a/data/projects/oc-monitor.yaml b/data/projects/oc-monitor.yaml new file mode 100644 index 0000000..beaa626 --- /dev/null +++ b/data/projects/oc-monitor.yaml @@ -0,0 +1,9 @@ +name: oc-monitor +repo: https://github.com/bikky-kc013/oc-monitor +tagline: Real-time terminal dashboard for tracking OpenCode session costs and usage. +description: A terminal UI (built with Go and Bubble Tea) that reads your local OpenCode SQLite database to show live session activity, burn-rate charts, and cost breakdowns by agent, model, and project. Includes daily/hourly usage trends with a calendar heatmap, per-session token and tool-call inspection, full-text search across sessions, and JSON export. All data stays local — the only network call is an optional lookup to models.dev for model context-window sizes. +kind: client +topics: + - cost + - observability +compat: n/a diff --git a/data/projects/ocm.yaml b/data/projects/ocm.yaml new file mode 100644 index 0000000..69dc7b9 --- /dev/null +++ b/data/projects/ocm.yaml @@ -0,0 +1,8 @@ +name: ocm +repo: https://github.com/wntic/ocm +tagline: Plugin marketplaces for OpenCode - install skills, agents, commands and MCP servers from any git repo, globally +description: Turn any git repository into a plugin marketplace. `ocm add ` installs its skills, agents, commands, JS plugins and MCP servers once into your global OpenCode config, so they work in every project, and `ocm update` plus a startup auto-sync keep them current. Includes a /ocm TUI for browsing, asks before any plugin code runs, and never overwrites your own files. +kind: tool +topics: + - environment +compat: n/a diff --git a/data/projects/ocp-xterr.yaml b/data/projects/ocp-xterr.yaml new file mode 100644 index 0000000..3fb6c4c --- /dev/null +++ b/data/projects/ocp-xterr.yaml @@ -0,0 +1,9 @@ +name: OCP +repo: https://github.com/xterr/ocp +tagline: Isolated OpenCode profiles +description: Juggling work and personal OpenCode accounts means hand-swapping env vars and clobbering your sessions. ocp gives each project its own auth, session history, and config — and switches automatically based on the directory you're in. Think direnv for OpenCode. +kind: tool +topics: + - environment + - providers +compat: n/a diff --git a/data/projects/ocp.yaml b/data/projects/ocp.yaml new file mode 100644 index 0000000..0b559a3 --- /dev/null +++ b/data/projects/ocp.yaml @@ -0,0 +1,8 @@ +name: ocp +repo: https://github.com/alvarosanchez/ocp +tagline: Manage OpenCode config profiles in Git +description: A CLI for switching OpenCode configuration profiles stored in Git repositories. +kind: tool +topics: + - environment +compat: n/a diff --git a/data/projects/octto.yaml b/data/projects/octto.yaml index f4a689d..9dafc4f 100644 --- a/data/projects/octto.yaml +++ b/data/projects/octto.yaml @@ -1,4 +1,8 @@ name: Octto repo: https://github.com/vtemian/octto tagline: Interactive browser UI for AI brainstorming -description: Interactive browser UI for AI brainstorming with multi-question forms, parallel exploration branches, and visual feedback. \ No newline at end of file +description: Interactive browser UI for AI brainstorming with multi-question forms, parallel exploration branches, and visual feedback. +kind: client +topics: + - workflow +compat: v1 diff --git a/data/projects/ocx.yaml b/data/projects/ocx.yaml index 1d5d2aa..6b45c9f 100644 --- a/data/projects/ocx.yaml +++ b/data/projects/ocx.yaml @@ -2,3 +2,7 @@ name: OCX repo: https://github.com/kdcokenny/ocx tagline: OpenCode package manager description: The missing package manager for OpenCode extensions - ShadCN model with Ghost Mode. +kind: tool +topics: + - environment +compat: v2 diff --git a/data/projects/oos.yaml b/data/projects/oos.yaml new file mode 100644 index 0000000..4597f39 --- /dev/null +++ b/data/projects/oos.yaml @@ -0,0 +1,8 @@ +name: oos +repo: https://github.com/wsaaaqqq/oos +tagline: Find any OpenCode session across all projects and resume it instantly +description: A TUI fuzzy finder over every OpenCode session from every project — type keywords to filter in real time, pick with ↑/↓, Enter to jump back into the conversation. Go, zero config, single binary. +kind: tool +topics: + - sessions +compat: n/a diff --git a/data/projects/open-agent.yaml b/data/projects/open-agent.yaml index 519b3ca..8e0d42e 100644 --- a/data/projects/open-agent.yaml +++ b/data/projects/open-agent.yaml @@ -1,4 +1,9 @@ name: Open Agent -repo: https://github.com/Th0rgal/openagent +repo: https://github.com/Th0rgal/orb tagline: Self-hosted control plane description: Self-hosted control plane for OpenCode agents with isolated Linux workspaces (systemd-nspawn), git-backed Library configuration, and multi-platform dashboards (Next.js web, SwiftUI iOS). +kind: client +topics: + - remote + - orchestration +compat: n/a diff --git a/data/projects/open-dispatch.yaml b/data/projects/open-dispatch.yaml index d137279..e40004a 100644 --- a/data/projects/open-dispatch.yaml +++ b/data/projects/open-dispatch.yaml @@ -2,3 +2,7 @@ name: Open Dispatch repo: https://github.com/bobum/open-dispatch tagline: Control agents from Slack, Teams, or Discord — locally or via Fly.io Sprites description: Bridge app connecting chat platforms (Slack/Teams/Discord) to AI coding assistants. Run agents locally or spin up isolated Fly.io Sprites for parallel execution. Supports 75+ AI providers via OpenCode, Claude CLI, real-time output streaming, session persistence, and smart message routing. +kind: client +topics: + - remote +compat: n/a diff --git a/data/projects/openchamber-design-studio.yaml b/data/projects/openchamber-design-studio.yaml new file mode 100644 index 0000000..a6c9de0 --- /dev/null +++ b/data/projects/openchamber-design-studio.yaml @@ -0,0 +1,9 @@ +name: OpenChamber Design Studio +repo: https://github.com/lastonoga/openchamber-design-studio +tagline: Open, local alternative to Claude Design inside OpenChamber +description: An OpenChamber extension that turns design work into a chat loop. It opens your running app in a real Chrome window beside the conversation; Cmd/Ctrl-click any element to attach it to the chat as a reference (selector, markup, computed styles), and the agent edits the real project while the preview reloads. Ships Design Mode (/design), per-project harness plugin, DESIGN.md / tokens.css authority with a vendored design-system preset catalog, project scaffolding, and a .design-studio.json project config. MIT, install from a git URL via Settings → Extensions. +kind: client +topics: + - ui + - media +compat: n/a diff --git a/data/projects/openchamber.yaml b/data/projects/openchamber.yaml index 216a360..581738e 100644 --- a/data/projects/openchamber.yaml +++ b/data/projects/openchamber.yaml @@ -1,4 +1,8 @@ name: OpenChamber -repo: https://github.com/btriapitsyn/openchamber +repo: https://github.com/openchamber/openchamber tagline: GUI for OpenCode description: A fan-made web and desktop interface for OpenCode with VS Code extension, multiple sessions, and git worktrees management. +kind: client +topics: + - ui +compat: v2 diff --git a/data/projects/openclient.yaml b/data/projects/openclient.yaml new file mode 100644 index 0000000..66e3771 --- /dev/null +++ b/data/projects/openclient.yaml @@ -0,0 +1,17 @@ +name: OpenClient +repo: https://github.com/ntoporcov/openclient +homepage: https://open-client.com/ +tagline: Native iPhone and iPad companion for self-hosted OpenCode servers +description: Native SwiftUI client for browsing projects, resuming sessions, streaming chat, handling permission and question prompts, and following active work through Live Activities and widgets. +kind: client +topics: + - remote + - ui +compat: n/a +tags: + - ios + - ipad + - mobile + - client + - swiftui + - self-hosted diff --git a/data/projects/opencode-a2a.yaml b/data/projects/opencode-a2a.yaml index 43581ac..e9db0a7 100644 --- a/data/projects/opencode-a2a.yaml +++ b/data/projects/opencode-a2a.yaml @@ -2,3 +2,8 @@ name: Opencode A2A repo: https://github.com/Intelligent-Internet/opencode-a2a tagline: Full A2A Protocol support for OpenCode. description: A production-ready A2A Protocol implementation that exposes OpenCode as a standardized Agent-to-Agent service, enabling seamless cross-agent collaboration and automated workflows. +kind: tool +topics: + - orchestration + - integrations +compat: n/a diff --git a/data/projects/opencode-actions.yaml b/data/projects/opencode-actions.yaml index 49c8747..807b59a 100644 --- a/data/projects/opencode-actions.yaml +++ b/data/projects/opencode-actions.yaml @@ -1,4 +1,9 @@ name: Opencode Actions -repo: https://github.com/Svtter/opencode-actions +repo: https://github.com/sun-praise/opencode-actions tagline: Reusable GitHub Actions for installing and running OpenCode in CI/CD workflows description: A collection of reusable GitHub Actions that make it easy to integrate OpenCode into your CI/CD pipelines. Includes actions for PR review, architecture review, spec coverage checking, and one-step opencode setup and execution. Supports caching, retry logic, and multiple LLM providers. +kind: tool +topics: + - git + - workflow +compat: n/a diff --git a/data/projects/opencode-agent-for-cowork.yaml b/data/projects/opencode-agent-for-cowork.yaml index 336b592..9a71e3a 100644 --- a/data/projects/opencode-agent-for-cowork.yaml +++ b/data/projects/opencode-agent-for-cowork.yaml @@ -1,16 +1,20 @@ name: opencode-agent for Cowork repo: https://github.com/MekaretEriker/opencode-agent-for-cowork tagline: Cowork plugin that turns Claude into an intelligent orchestrator for OpenCode sessions -description: | +description: |- A Cowork (Claude desktop) plugin that bridges natural language conversations with OpenCode. Handles agent routing (build/plan/@general), stall detection, result validation (diff coherence, tests, build, semantic alignment), per-project operational memory, provider fallback chain (anthropic → openrouter → openai), and MCP composability with existing user tools. Ships 8 orchestration skills, 3 scheduled-task recipes, and 1 custom agent template (cowork-with-github). Install: drag-and-drop .plugin into Cowork. +kind: tool +topics: + - orchestration +compat: n/a tags: - cowork - orchestration - claude - multi-session - - plugin \ No newline at end of file + - plugin diff --git a/data/projects/opencode-chat-export.yaml b/data/projects/opencode-chat-export.yaml index e133095..db3e36a 100644 --- a/data/projects/opencode-chat-export.yaml +++ b/data/projects/opencode-chat-export.yaml @@ -2,3 +2,7 @@ name: Opencode Chat Export repo: https://github.com/jjserenity/opencode-chat-export tagline: MCP server to export chat history to Markdown description: MCP server that exports OpenCode chat history to Markdown files with tool calls, reasoning, and cost summaries. Export current session, specific sessions by ID, or bulk exports. pip installable. +kind: mcp-server +topics: + - sessions +compat: n/a diff --git a/data/projects/opencode-dashboard.yaml b/data/projects/opencode-dashboard.yaml new file mode 100644 index 0000000..b208879 --- /dev/null +++ b/data/projects/opencode-dashboard.yaml @@ -0,0 +1,9 @@ +name: OpenCode Dashboard +repo: https://github.com/touchkale/opencode-dashboard +tagline: Single-file live token usage dashboard with zero dependencies +description: A live usage dashboard served by one Python file — no framework, no build step, no dependencies. Token-first views of sessions, models, projects, tokens by changed file/subsystem, tokens per git commit, and a 52-week activity heatmap, with click-to-filter and JSON/CSV export. +kind: client +topics: + - cost + - ui +compat: n/a diff --git a/data/projects/opencode-db-clean.yaml b/data/projects/opencode-db-clean.yaml new file mode 100644 index 0000000..a1b6ca7 --- /dev/null +++ b/data/projects/opencode-db-clean.yaml @@ -0,0 +1,25 @@ +name: OpenCode Database Cleaner +repo: https://github.com/chncaesar/opencode-db-clean +tagline: Safely analyze and reclaim unused space in OpenCode's SQLite database +description: A zero-dependency Python CLI that reports live data and freelist bloat in OpenCode's local SQLite database, then safely reclaims unused disk space with process checks, WAL checkpointing, verified backups, VACUUM, and integrity checks. It does not delete sessions. +kind: tool +topics: + - sessions + - environment +compat: n/a +scope: + - global +tags: + - database + - sqlite + - maintenance + - disk-space + - reliability +installation: | + Install from PyPI: + + ```bash + pip install ocdbc + ``` + + Run `ocdbc analyze` first. Close OpenCode before running `ocdbc vacuum`. diff --git a/data/projects/opencode-ddev.yaml b/data/projects/opencode-ddev.yaml index 4fbc202..30f9c59 100644 --- a/data/projects/opencode-ddev.yaml +++ b/data/projects/opencode-ddev.yaml @@ -2,3 +2,7 @@ name: Opencode DDEV repo: https://github.com/JUVOJustin/opencode-ddev tagline: DDEV container wrapper description: Wraps bash commands to execute inside the DDEV container (Docker-based PHP development environments). +kind: tool +topics: + - environment +compat: v1 diff --git a/data/projects/opencode-handoff-p2p.yaml b/data/projects/opencode-handoff-p2p.yaml index 935ee50..bf9ce34 100644 --- a/data/projects/opencode-handoff-p2p.yaml +++ b/data/projects/opencode-handoff-p2p.yaml @@ -2,3 +2,8 @@ name: opencode-handoff-p2p repo: https://github.com/Eldorado-ling/opencode-handoff-p2p tagline: Transfer OpenCode session share URLs P2P via private GitHub inbox repos description: An OpenCode skill that transfers session share URLs between machines or collaborators peer-to-peer using personal GitHub private inbox repositories. Features a 5-tier verification pipeline (filename regex, trusted-sender allowlist, byte-level content validation, GitHub commit author+committer attribution, GPG signature), transactional fetch-before-delete (URL fetch failure preserves the inbox file for retry), and a Chinese-language trust-boundary preamble that prevents fetched share content from autonomously triggering local actions. Each user owns one private inbox repo; senders push directly into it via collaborator access. Includes a reference Python verification script for deterministic cross-shell behavior. +kind: tool +topics: + - sessions + - git +compat: n/a diff --git a/data/projects/opencode-helper.yaml b/data/projects/opencode-helper.yaml new file mode 100644 index 0000000..1bbd4f7 --- /dev/null +++ b/data/projects/opencode-helper.yaml @@ -0,0 +1,9 @@ +name: Opencode Helper +repo: https://github.com/v587d/opencode-helper +tagline: Cleanup, analysis & visualization CLI for OpenCode +description: Zero-dependency Python CLI that cleans old sessions and temp files, analyzes model/tool/MCP/skill usage patterns with AI interpretation, and generates visual workflow diagrams. pip install opencode-helper. +kind: tool +topics: + - sessions + - ui +compat: n/a diff --git a/data/projects/opencode-history-search.yaml b/data/projects/opencode-history-search.yaml index 3836e2a..280eccb 100644 --- a/data/projects/opencode-history-search.yaml +++ b/data/projects/opencode-history-search.yaml @@ -2,3 +2,7 @@ name: Opencode History Search repo: https://github.com/joeyism/opencode-history-search tagline: Search OpenCode conversations with keyword, regex, and fuzzy search description: Search through your OpenCode conversation history with powerful keyword, regex, and fuzzy search capabilities. Features date filtering, multiple match types (titles, messages, tools, file paths), and fast performance (<50ms queries). +kind: tool +topics: + - sessions +compat: v1 diff --git a/data/projects/opencode-kanban.yaml b/data/projects/opencode-kanban.yaml index 1eb5c6f..d277bb8 100644 --- a/data/projects/opencode-kanban.yaml +++ b/data/projects/opencode-kanban.yaml @@ -1,4 +1,9 @@ name: opencode-kanban -repo: https://github.com/qrafty-ai/opencode-kanban +repo: https://github.com/TomCC7/opencode-kanban tagline: Kanban-style task management for opencode -description: Kanban tool that allows you to stay in terminal. \ No newline at end of file +description: Kanban tool that allows you to stay in terminal. +kind: client +topics: + - workflow + - ui +compat: n/a diff --git a/data/projects/opencode-mobile-2.yaml b/data/projects/opencode-mobile-2.yaml new file mode 100644 index 0000000..fbb342f --- /dev/null +++ b/data/projects/opencode-mobile-2.yaml @@ -0,0 +1,8 @@ +name: OpenCode Mobile +repo: https://github.com/alvarolorentedev/opencode-mobile +tagline: Your OpenCode workflow in your pocket. Manage AI coding agents from Android and iOS. +description: OpenCode Mobile is a free, open-source, community-built companion app for OpenCode on Android and iOS. Connect to your self-hosted OpenCode server to start coding sessions, monitor agent progress, approve permissions, review code changes, browse files, access the terminal, and manage projects and AI models directly from your phone. Optional secure remote connectivity lets you stay connected to your development environment from anywhere, while your code and workloads remain on your own computer. No cloud-hosted development environment required. +kind: client +topics: + - remote +compat: v2 diff --git a/data/projects/opencode-mobile.yaml b/data/projects/opencode-mobile.yaml index 9220035..cc1bd45 100644 --- a/data/projects/opencode-mobile.yaml +++ b/data/projects/opencode-mobile.yaml @@ -1,8 +1,12 @@ name: OpenCode Mobile repo: https://github.com/dzianisv/opencode-mobile +homepage: https://dzianisv.github.io/opencode-mobile/ tagline: Android client for OpenCode — drive your self-hosted agent from your phone description: Free, open-source (MIT) Android app that connects to an opencode server you run yourself. Stream coding sessions in real time, review file diffs, and approve tool calls from your phone. Install via the F-Droid repo or a signed APK. -homepage: https://dzianisv.github.io/opencode-mobile/ +kind: client +topics: + - remote +compat: n/a tags: - android - mobile diff --git a/data/projects/opencode-neovim.yaml b/data/projects/opencode-neovim.yaml index d551fd4..037e3ac 100644 --- a/data/projects/opencode-neovim.yaml +++ b/data/projects/opencode-neovim.yaml @@ -1,4 +1,8 @@ name: Opencode Neovim -repo: https://github.com/NickvanDyke/opencode.nvim +repo: https://github.com/nickjvandyke/opencode.nvim tagline: Neovim plugin description: Neovim plugin for making convenient editor-aware prompts. +kind: client +topics: + - ui +compat: n/a diff --git a/data/projects/opencode-profile-router.yaml b/data/projects/opencode-profile-router.yaml index 9baa378..f2f0d23 100644 --- a/data/projects/opencode-profile-router.yaml +++ b/data/projects/opencode-profile-router.yaml @@ -2,6 +2,11 @@ name: Opencode Profile Router repo: https://github.com/leolaurindo/opencode-profile-router tagline: Profile router for auth and selective config isolation description: Shell wrapper for OpenCode that selects named profiles by path and can isolate provider login state, config directories, and data roots selectively and independently per profile. +kind: tool +topics: + - providers + - environment +compat: n/a tags: - cli - profiles diff --git a/data/projects/opencode-rust.yaml b/data/projects/opencode-rust.yaml new file mode 100644 index 0000000..b281426 --- /dev/null +++ b/data/projects/opencode-rust.yaml @@ -0,0 +1,13 @@ +name: opencode-rust +repo: https://github.com/vakandi/opencode-rust +tagline: The open source AI coding agent, in Rust - CLI, TUI and HTTP server +description: "An independent Rust implementation of the TypeScript opencode, providing a CLI, a TUI and an HTTP server for local AI agents, with no Docker required. MIT licensed, 21 crates and 571 tests. The command is `opr`; install with `npm install -g opencode-rust` or `brew install vakandi/tap/opencode-rust`. Not affiliated with the OpenCode team. Docs: https://vakandi.github.io/opencode-rust/" +kind: fork +topics: + - environment +compat: n/a +tags: + - rust + - fork + - cli + - tui diff --git a/data/projects/opencode-sentry.yaml b/data/projects/opencode-sentry.yaml new file mode 100644 index 0000000..3e0608b --- /dev/null +++ b/data/projects/opencode-sentry.yaml @@ -0,0 +1,28 @@ +name: OpenCode Sentry +repo: https://github.com/sudo-heyu/OpenCodesentry +tagline: "Android companion: scan-to-pair live OpenCode console + screen-off alerts over Tailscale" +description: "The Android companion for OpenCode. Scan one QR printed by the self-hosted bridge and the official web console opens in-app: watch every session live, send prompts, follow reasoning, tool runs and streaming output, switch models — all directly over your own Tailscale network. A foreground service also rings, vibrates and speaks when a task finishes, needs permission, asks a question or fails, with a three-layer keep-alive (accessibility keeper, persistent Job, exact-alarm watchdog) that survives aggressive vendor-ROM clean-ups. Everything stays on your own tailnet — no third-party server. Not affiliated with the OpenCode team." +kind: client +topics: + - remote + - notifications +compat: n/a +tags: + - android + - notifications + - mobile + - tailscale + - self-hosted + - tts + - console + - ai-agent + - remote-control +installation: | + Download the APK from the [Releases page](https://github.com/sudo-heyu/OpenCodesentry/releases) + (Android 12+). + + On the machine that runs OpenCode, start the bridge with a pairing QR: + `python3 tools/bridge/opencode-bridge.py --pair`, then scan the QR from the app's + "主页" tab — one scan configures the console, the address and the credentials. + Manual setup and the full guide: + [tools/bridge/README.md](https://github.com/sudo-heyu/OpenCodesentry/blob/main/tools/bridge/README.md). diff --git a/data/projects/opencode-session.yaml b/data/projects/opencode-session.yaml index 892c61d..8144634 100644 --- a/data/projects/opencode-session.yaml +++ b/data/projects/opencode-session.yaml @@ -2,3 +2,7 @@ name: Opencode Session Manager repo: https://github.com/GNITOAHC/opencode-session tagline: Session viewer & manager description: View & Manage sessions for opencode, also detect orphan sessions for deletion +kind: tool +topics: + - sessions +compat: n/a diff --git a/data/projects/opencode-sessions.yaml b/data/projects/opencode-sessions.yaml deleted file mode 100644 index ed4d58b..0000000 --- a/data/projects/opencode-sessions.yaml +++ /dev/null @@ -1,4 +0,0 @@ -name: Opencode Sessions -repo: https://github.com/malhashemi/opencode-sessions -tagline: Session tracker -description: Session management tool for opencode to track and organise coding sessions. diff --git a/data/projects/opencode-sidebar.yaml b/data/projects/opencode-sidebar.yaml index 69791db..42300d0 100644 --- a/data/projects/opencode-sidebar.yaml +++ b/data/projects/opencode-sidebar.yaml @@ -2,3 +2,9 @@ name: OpenCode Sidebar repo: https://github.com/arnavpisces/opencode-sidebar tagline: Tmux sidebar for managing OpenCode sessions description: A tmux-backed sidebar launcher for OpenCode that keeps the session list, preview pane, and OpenCode TUI together in one workspace. It supports session recall, background sessions, search, project folders, deletion, and sound notifications. +kind: client +topics: + - sessions + - ui + - environment +compat: v1 diff --git a/data/projects/opencode-skills.yaml b/data/projects/opencode-skills.yaml index a9fdd16..cecbfdd 100644 --- a/data/projects/opencode-skills.yaml +++ b/data/projects/opencode-skills.yaml @@ -2,3 +2,7 @@ name: Opencode Skills repo: https://github.com/malhashemi/opencode-skills tagline: Skills management description: Skills management system for organising and tracking opencode capabilities. +kind: tool +topics: + - prompting +compat: v1 diff --git a/data/projects/opencode-telegram-bot.yaml b/data/projects/opencode-telegram-bot.yaml index 2443f0f..0094ea1 100644 --- a/data/projects/opencode-telegram-bot.yaml +++ b/data/projects/opencode-telegram-bot.yaml @@ -2,3 +2,7 @@ name: Opencode Telegram Bot repo: https://github.com/grinev/opencode-telegram-bot tagline: Telegram bot client for OpenCode CLI description: Run and monitor AI coding tasks from your phone while everything runs locally on your machine. +kind: client +topics: + - remote +compat: v2 diff --git a/data/projects/opencode-unlimited-proxy.yaml b/data/projects/opencode-unlimited-proxy.yaml new file mode 100644 index 0000000..dd78441 --- /dev/null +++ b/data/projects/opencode-unlimited-proxy.yaml @@ -0,0 +1,30 @@ +name: OpenCode Unlimited Proxy +repo: https://github.com/ebouther/opencode-unlimited-proxy +tagline: Self-hosted OpenAI-compatible gateway for the OpenCode free tier, with a de-duplicated egress pool +description: "Serves OpenCode's anonymous free tier (`Bearer public`) through an OpenAI-compatible API. Documents and implements the four server-side conditions those models gate on, so callers outside the CLI don't hit `403 FreeTierError`: a tool named exactly `read` (renaming it does not count), forced `stream: true`, a versioned `User-Agent`, and a canonically-encoded session id. Each one is independently probeable with `scripts/gate-probe.py`, which ships negative controls so a pass cannot be confused with a broken harness. In front of the gateway sits a de-duplicated pool of rotating egress addresses, so six nodes are six quota buckets rather than three." +kind: tool +topics: + - providers +compat: n/a +tags: + - gateway + - proxy + - free-tier + - self-hosted + - openai-compatible +installation: | + ```bash + git clone https://github.com/ebouther/opencode-unlimited-proxy && cd opencode-unlimited-proxy/stack + cp .env.example .env && sed -i 's/WARP_ACCEPT_TOS=0/WARP_ACCEPT_TOS=1/' .env + docker compose up -d --build + ../scripts/smoke.sh + ``` + + Then point any OpenAI-compatible client at `http://127.0.0.1:8080/v1`. + + Only the gate probe is needed to *diagnose* the free tier, and it needs no + stack at all: + + ```bash + ./scripts/gate-probe.py + ``` diff --git a/data/projects/opencode-vim.yaml b/data/projects/opencode-vim.yaml index b3983a1..ff207ad 100644 --- a/data/projects/opencode-vim.yaml +++ b/data/projects/opencode-vim.yaml @@ -1,8 +1,12 @@ name: OpenCode Vim repo: https://github.com/leohenon/opencode-vim +homepage: https://leohenon.github.io/opencode-vim/ tagline: OpenCode fork with built-in Vim mode description: An unofficial OpenCode fork that adds Vim motions, navigation, and editing directly to the OpenCode TUI. -homepage: https://leohenon.github.io/opencode-vim/ +kind: fork +topics: + - ui +compat: v2 tags: - fork - vim diff --git a/data/projects/opencode-web.yaml b/data/projects/opencode-web.yaml index 757c3cc..bbfb560 100644 --- a/data/projects/opencode-web.yaml +++ b/data/projects/opencode-web.yaml @@ -1,4 +1,9 @@ name: Opencode Web -repo: https://github.com/kcrommett/opencode-web +repo: https://github.com/shuv1337/oc-web tagline: Browser-based access description: Web interface for opencode - browser-based access to AI coding agent. +kind: client +topics: + - remote + - ui +compat: v1 diff --git a/data/projects/openhook.yaml b/data/projects/openhook.yaml new file mode 100644 index 0000000..86a594c --- /dev/null +++ b/data/projects/openhook.yaml @@ -0,0 +1,9 @@ +name: Openhook +repo: https://github.com/openhook-dev/openhook-inbox +tagline: Give OpenCode a callback inbox to test webhook integrations through MCP. +description: Open-source callback inbox with a hosted Streamable HTTP MCP endpoint and an OpenCode setup recipe. Create a disposable inbox, wait for a webhook, inspect the received body and headers, then clean up the test inbox. Private per-inbox tokens control access to captured events. Also supports email and DNS capture, with self-hosting available. +kind: mcp-server +topics: + - code-quality + - integrations +compat: n/a diff --git a/data/projects/openkrak.yaml b/data/projects/openkrak.yaml new file mode 100644 index 0000000..bfbf866 --- /dev/null +++ b/data/projects/openkrak.yaml @@ -0,0 +1,9 @@ +name: OpenKrak +repo: https://github.com/FrnzJulianBergmann/openkrak +tagline: Pre-computes your repo structure via Dorchester engine before the LLM sees a single token +description: OpenKrak is an MCP server that runs the Dorchester static analysis engine on your repository and delivers a structured Mahadata brief to your coding agent before it reads any files. Cuts token usage 20-80% by replacing raw file reads with a pre-computed dependency graph, hotspot ranking, and blast radius map. Works with OpenCode. Free tier includes 15 queries per 24h rolling window. Install via npm install -g openkrak-mcp. +kind: tool +topics: + - code-intel + - context +compat: n/a diff --git a/data/projects/openmate.yaml b/data/projects/openmate.yaml new file mode 100644 index 0000000..1b4ec7e --- /dev/null +++ b/data/projects/openmate.yaml @@ -0,0 +1,13 @@ +name: OpenMate +repo: https://github.com/bob-dawson/openmate +tagline: Offline-first Android client for OpenCode, connect from anywhere +description: Native Android (Kotlin/Compose) client for a self-hosted opencode server. Connects over your local network or automatically through a cloud relay, so you can reach your agent from anywhere. A lightweight Bridge streams incremental, seq-based sync from opencode's own database into a local copy on your phone, so you can read and reply to sessions offline. Supports opencode v2 only. +kind: client +topics: + - remote +compat: n/a +tags: + - android + - mobile + - client + - offline diff --git a/data/projects/openspec.yaml b/data/projects/openspec.yaml index 6b0c4b7..6e4c504 100644 --- a/data/projects/openspec.yaml +++ b/data/projects/openspec.yaml @@ -2,3 +2,7 @@ name: OpenSpec repo: https://github.com/Fission-AI/OpenSpec tagline: Spec-driven development description: Spec-driven development with opencode - structured specification management. +kind: tool +topics: + - workflow +compat: n/a diff --git a/data/projects/opentab.yaml b/data/projects/opentab.yaml index 3b02154..56e4dad 100644 --- a/data/projects/opentab.yaml +++ b/data/projects/opentab.yaml @@ -1,12 +1,11 @@ name: OpenTab repo: https://github.com/hamidi-dev/opentab tagline: Terminal UI for browsing your OpenCode spend by month, day, project, session, and model -description: >- - A terminal UI that reads OpenCode's local SQLite database (read-only) to show - where your tokens and money went — by month, day, project, session, and model, - with spend-over-time trends and drill-down into your most expensive sessions - (model mix and subagent costs included). Standard-library Python only, offline - by default. Also reads Claude Code, Codex, the Copilot CLI, and more. +description: A terminal UI that reads OpenCode's local SQLite database (read-only) to show where your tokens and money went — by month, day, project, session, and model, with spend-over-time trends and drill-down into your most expensive sessions (model mix and subagent costs included). Standard-library Python only, offline by default. Also reads Claude Code, Codex, the Copilot CLI, and more. +kind: client +topics: + - cost +compat: n/a tags: - cost - tokens diff --git a/data/projects/openwork.yaml b/data/projects/openwork.yaml index 02bc0a9..38d9993 100644 --- a/data/projects/openwork.yaml +++ b/data/projects/openwork.yaml @@ -1,8 +1,13 @@ name: OpenWork repo: https://github.com/different-ai/openwork +homepage: https://openwork.software/ tagline: Desktop GUI for OpenCode workflows description: Open-source alternative to Claude Cowork built on top of OpenCode. Provides a polished desktop UI for sessions, skills, plugins, and templates. -homepage: https://openwork.software/ +kind: client +topics: + - ui + - workflow +compat: v1 tags: - desktop - gui diff --git a/data/projects/openwts.yaml b/data/projects/openwts.yaml new file mode 100644 index 0000000..3ddd6d1 --- /dev/null +++ b/data/projects/openwts.yaml @@ -0,0 +1,30 @@ +name: openwts +repo: https://github.com/atpaawej/openwts +tagline: Isolated git worktrees for AI coding agents — opencode, Claude Code, and more +description: |- + Stop context-switching. openwts creates isolated git worktrees for each task + and opens your AI coding agent inside them — no stashing, no partial commits, + no "what branch was I on?" + + One command — `openwts opencode hotfix` — creates a worktree, opens opencode + inside it, and cleans up when you exit. Jump between tasks like it's nothing. + + Features + - Agent-agnostic: opencode, Claude Code, and any AI CLI on PATH + - Auto-detects opencode, falls back to an interactive picker + - Works on all platforms: Linux, macOS, Windows + - Manifest tracking — never touches worktrees it didn't create + - Cleanup modes: auto-remove, prompt, or leave + + Zero config. One env var if you want a default agent. +kind: tool +topics: + - git + - orchestration +compat: n/a +tags: + - productivity + - workflow + - git + - worktree + - multi-agent diff --git a/data/projects/orcareplay.yaml b/data/projects/orcareplay.yaml new file mode 100644 index 0000000..6ab56f5 --- /dev/null +++ b/data/projects/orcareplay.yaml @@ -0,0 +1,14 @@ +name: OrcaReplay +repo: https://github.com/Continuum-AI-Corp/OrcaReplay +tagline: Record an OpenCode run, replay it offline with the network off, fork it onto another model +description: "Records an OpenCode session without modifying it, then replays that run with the network off and reproduces it with the network off, or forks it from any step so the model is the only thing that changed. Because OpenCode keeps its provider origin in opencode.json rather than an environment variable, there is nothing to redirect: the adapter terminates the TLS OpenCode opened itself using a per-run CA that only the launched process trusts and that is deleted when the run ends, and your config is left untouched. Alongside the model traffic it records shell exit codes and timing, per-turn file changes and MCP calls, all on one timeline. Apache-2.0, Node 20+, and the trace format is a published spec so other readers can be written against it." +kind: tool +topics: + - observability + - code-quality +compat: n/a +tags: + - debugging + - replay + - observability + - cli diff --git a/data/projects/orkas.yaml b/data/projects/orkas.yaml new file mode 100644 index 0000000..c239c3e --- /dev/null +++ b/data/projects/orkas.yaml @@ -0,0 +1,8 @@ +name: Orkas +repo: https://github.com/Orkas-AI/Orkas +tagline: Local-first multi-agent desktop workspace with OpenCode orchestration +description: Orkas is an open-source desktop AI workforce whose Commander coordinates specialist agents and can run OpenCode alongside Claude Code, Codex, and Cline from one chat. Conversations, files, agent configurations, and model keys stay local. +kind: client +topics: + - orchestration +compat: n/a diff --git a/data/projects/p4oc.yaml b/data/projects/p4oc.yaml index 9540178..ef952ee 100644 --- a/data/projects/p4oc.yaml +++ b/data/projects/p4oc.yaml @@ -2,3 +2,7 @@ name: P4OC (Pocket for OpenCode) repo: https://github.com/theblazehen/P4OC tagline: Android client for OpenCode description: Native Android app for controlling OpenCode from your phone. Chat with AI, manage sessions, browse files with syntax highlighting, view diffs, and use an embedded terminal — all styled with a terminal UI aesthetic. Available on Google Play. +kind: client +topics: + - remote +compat: n/a diff --git a/data/projects/parallel-code.yaml b/data/projects/parallel-code.yaml new file mode 100644 index 0000000..03dc4ce --- /dev/null +++ b/data/projects/parallel-code.yaml @@ -0,0 +1,8 @@ +name: Parallel Code +repo: https://github.com/johannesjo/parallel-code +tagline: Orchestrate multiple AI coding agents simultaneously +description: Desktop app for orchestrating multiple AI coding agents (Claude Code, Codex CLI, Gemini CLI) simultaneously in isolated git worktrees. Run agents in parallel, each in their own branch, and merge results when ready. +kind: client +topics: + - orchestration +compat: n/a diff --git a/data/projects/patchwarden.yaml b/data/projects/patchwarden.yaml new file mode 100644 index 0000000..81c735d --- /dev/null +++ b/data/projects/patchwarden.yaml @@ -0,0 +1,19 @@ +name: PatchWarden +repo: https://github.com/jiezeng2004-design/PatchWarden +homepage: https://github.com/jiezeng2004-design/PatchWarden#readme +tagline: Local-first MCP safety layer for OpenCode and other AI coding agents +description: PatchWarden is a local-first MCP safety and verification layer for AI coding agents. It provides workspace confinement, command allowlists, scope-violation detection, and auditable task evidence for OpenCode and other MCP clients. +kind: mcp-server +topics: + - security +compat: n/a +tags: + - mcp + - security + - verification + - local-first + - opencode +installation: | + ```bash + npx -y patchwarden@1.6.2 + ``` diff --git a/data/projects/pickysteve.yaml b/data/projects/pickysteve.yaml new file mode 100644 index 0000000..1dd998e --- /dev/null +++ b/data/projects/pickysteve.yaml @@ -0,0 +1,9 @@ +name: PickySteve +repo: https://github.com/KernelLord/pickysteve +tagline: Local skill router and context picker for coding agents +description: A cheap local model routes each prompt to the right skill via hybrid retrieval (BM25 + embeddings, RRF-fused) with cross-encoder reranking and an LLM judge, then assembles a minimal context bundle for the execution model. Runs fully offline on local Ollama by default and ships a fail-closed prompt-injection gate (ONNX classifier) that scans both requests and retrieved documents. Exposes an MCP stdio server and an OpenAI-compatible proxy, with a one-command installer wiring 18 coding agents including Claude Code, Cursor, and OpenCode. +kind: mcp-server +topics: + - prompting + - context +compat: n/a diff --git a/data/projects/ppt-design-skill.yaml b/data/projects/ppt-design-skill.yaml new file mode 100644 index 0000000..4dc5ab5 --- /dev/null +++ b/data/projects/ppt-design-skill.yaml @@ -0,0 +1,20 @@ +name: PPT Design Skill +repo: https://github.com/sunchaokun/PPT-Design-Skill +tagline: One-liner PPT generation —40,000+ styles, AI images, fully editable .pptx +description: "AI-powered PPT generation skill for OpenCode, Claude Code, Codex, Cursor, and 13+ AI coding platforms. Three modes: FreeStyle (one-liner quick generation), Build Script (pixel-perfect delivery with python-pptx), and VI Build (enterprise template compliance). Features 40,000+ style combinations via natural language (--style \"dark cyberpunk\"), 5 AI image engines (Seedream/GPT Image/DALL-E/Wanx/Kimi), 10 diagram types, 28 design quality upgrades, advanced effects (3D shapes, gradient text, frosted glass, morph transitions), and CJK font support. Outputs fully editable .pptx files directly —356x faster than HTML-to-screenshot approaches. Includes a component library with 5,500+ SmartArt/GroupShape templates and one-command installation for all platforms." +kind: skill +topics: + - media +compat: n/a +scope: + - project + - global +tags: + - ppt + - presentation + - design + - python-pptx + - ai-images + - skill + - productivity + - diagram diff --git a/data/projects/pricewin.yaml b/data/projects/pricewin.yaml new file mode 100644 index 0000000..be3ef10 --- /dev/null +++ b/data/projects/pricewin.yaml @@ -0,0 +1,8 @@ +name: PriceWin +repo: https://github.com/PriceDotWin/pricewin-agent-plugin +tagline: Remote MCP server and skill for live hotel and flight prices across Booking.com, Agoda, Trip.com and Traveloka +description: Compares live hotel and flight prices in USD across Booking.com, Agoda, Trip.com, Traveloka and Google Flights through one remote MCP server (https://mcp.price.win/mcp, no account or API key). Add it to opencode.json as a remote MCP server and copy the bundled pricewin-travel-search skill to ~/.agents/skills, which OpenCode loads automatically. Results name their source and link to it for booking. +kind: mcp-server +topics: + - domain +compat: n/a diff --git a/data/projects/professor.yaml b/data/projects/professor.yaml new file mode 100644 index 0000000..b6df520 --- /dev/null +++ b/data/projects/professor.yaml @@ -0,0 +1,17 @@ +name: Professor +repo: https://github.com/rezzminator/professor +homepage: https://github.com/rezzminator/professor +tagline: Fleet-boost discipline layer for Claude Code, Codex & OpenCode agents +description: An LLM-harness fleet boost framework that turns your AI coding agents into a disciplined engineering team you can see, message, and hold to the rules. Ships a compiled .opencode/ layer (agents, commands, skill symlinks, opencode.jsonc with pinned denies) generated from its Claude sources, plus pfm, a Go CLI/TUI that lists OpenCode chats alongside Claude Code and Codex sessions. +kind: skill +topics: + - workflow +compat: n/a +scope: + - project +tags: + - opencode + - claude-code + - codex + - multi-agent + - cli diff --git a/data/projects/qwen-audio-agent.yaml b/data/projects/qwen-audio-agent.yaml new file mode 100644 index 0000000..383108d --- /dev/null +++ b/data/projects/qwen-audio-agent.yaml @@ -0,0 +1,14 @@ +name: qwen-audio-agent +repo: https://github.com/QwenAudio/qwen-audio-agent +tagline: Full-duplex voice runtime for OpenCode and other ACP agents +description: Realtime full-duplex voice interface that connects to OpenCode natively over ACP, with one-click install and DashScope configuration. Conversations keep going while OpenCode runs tasks in the background, and task results flow back into the same voice conversation. Also supports Claude Code, Codex, Kimi Code, and more. Ships a macOS desktop app, terminal TUI, and web UI. +kind: client +topics: + - voice +compat: n/a +tags: + - voice + - speech + - acp + - desktop + - tui diff --git a/data/projects/qwen-code-oai-proxy.yaml b/data/projects/qwen-code-oai-proxy.yaml index a8f85ae..ac6f383 100644 --- a/data/projects/qwen-code-oai-proxy.yaml +++ b/data/projects/qwen-code-oai-proxy.yaml @@ -2,3 +2,7 @@ name: Qwen Code OAI Proxy repo: https://github.com/aptdnfapt/qwen-code-oai-proxy tagline: Qwen model proxy description: An OpenAI-Compatible Proxy Server for Qwen models. +kind: tool +topics: + - providers +compat: n/a diff --git a/data/projects/redcode.yaml b/data/projects/redcode.yaml index 6a97a58..d428da0 100644 --- a/data/projects/redcode.yaml +++ b/data/projects/redcode.yaml @@ -1,12 +1,11 @@ name: RedCode repo: https://github.com/JiaHuiRed/RedCode tagline: TUI + GUI dual-interface AI coding assistant with MCP ecosystem -description: >- - A feature-rich opencode fork with dual-interface (TUI terminal + GUI desktop), - built-in MCP ecosystem (CodeGraph, TypeGraph, jCodeMunch, Browser, Vision, Web Search), - automated memory system, AI personality system, skill extensions, and 3-tier - permission guardrails. Privacy-first design with personal data fully separated - from public templates. +description: A feature-rich opencode fork with dual-interface (TUI terminal + GUI desktop), built-in MCP ecosystem (CodeGraph, TypeGraph, jCodeMunch, Browser, Vision, Web Search), automated memory system, AI personality system, skill extensions, and 3-tier permission guardrails. Privacy-first design with personal data fully separated from public templates. +kind: fork +topics: + - ui +compat: n/a tags: - fork - gui diff --git a/data/projects/ritemark.yaml b/data/projects/ritemark.yaml new file mode 100644 index 0000000..439f3ce --- /dev/null +++ b/data/projects/ritemark.yaml @@ -0,0 +1,15 @@ +name: Ritemark +repo: https://github.com/ProductoryHQ/ritemark-native +homepage: https://ritemark.app +tagline: Markdown writing app for macOS and Windows where OpenCode works directly in your local documents. +description: Open-source (MIT) desktop writing app with a visual editor for plain Markdown files in a folder on your computer. OpenCode, with your own API keys, is one of its built-in agents (beside Claude Code and Codex) and edits the documents in place, with a built-in terminal beside the document. Each window is one folder with its own conversations, AGENTS.md, agents and skills. Mermaid and draw.io diagrams, and export to Word and PDF. +kind: client +topics: + - docs + - ui +compat: n/a +tags: + - desktop + - markdown + - writing + - gui diff --git a/data/projects/roborev.yaml b/data/projects/roborev.yaml new file mode 100644 index 0000000..f248bef --- /dev/null +++ b/data/projects/roborev.yaml @@ -0,0 +1,14 @@ +name: Roborev +repo: https://github.com/kenn-io/roborev +tagline: Background code review agent with OpenCode agent-hook support +description: A multi-agent background commit-review tool that runs automated code reviews and exposes a $roborev-fix skill via OpenCode's agent hook. Useful for catching issues before they land while keeping the review loop inside the OpenCode workflow. +kind: tool +topics: + - code-quality + - git +compat: n/a +tags: + - code-review + - background-agent + - git + - opencode diff --git a/data/projects/rolecraft.yaml b/data/projects/rolecraft.yaml new file mode 100644 index 0000000..01576e0 --- /dev/null +++ b/data/projects/rolecraft.yaml @@ -0,0 +1,16 @@ +name: rolecraft +repo: https://github.com/rolecraft-sh/rolecraft +tagline: The package manager for AI agents — install, test, publish, and manage skills & MCP servers across 86+ agents +description: Zero-dependency CLI for installing AI agent skills as roles & behaviors from any source (local folders, GitHub, GitLab, SSH). Supports 86 agent targets (26 verified), lockfile-based CI re-install with `rolecraft ci`, `rolecraft doctor` for troubleshooting, and bundled team onboarding. Works with opencode, claude-code, cursor, and more. +kind: tool +topics: + - environment + - prompting +compat: n/a +tags: + - cli + - skills + - mcp + - package-manager + - agents + - opencode diff --git a/data/projects/sabi-inference-router.yaml b/data/projects/sabi-inference-router.yaml new file mode 100644 index 0000000..b7ef8a4 --- /dev/null +++ b/data/projects/sabi-inference-router.yaml @@ -0,0 +1,22 @@ +name: Sabi +repo: https://github.com/vizuh/sabi +homepage: https://github.com/vizuh/sabi/blob/main/docs/adapters/opencode.md +tagline: Adaptive per-round inference routing for coding agents — model, effort and provider scheduled against the trajectory +description: |- + Sits between a coding harness and its model providers and makes a fresh routing decision per inference round, not per session. Each round is classified from trajectory state — round position, tool calls and their results, failure evidence, context pressure — and a deterministic policy maps class to tier (failure → strong, exploration → cheap, first-turn → mid). An optional semantic judge (TypeSafe Jev) runs only on rounds the policy cannot classify, and is fail-open. The harness loop is untouched. + Exposes an OpenAI-compatible local proxy at 127.0.0.1:8787/v1. From OpenCode, `npm run connect:opencode` writes only a provider.sabi entry and the adaptive alias is `sabi/sabi-code`; fixed baselines `sabi/sabi-cheap`, `sabi/sabi-mid` and `sabi/sabi-strong` are available for comparison. Borrowed-auth passthrough is supported: the harness keeps its own credential and Sabi rewrites only model. Decisions and cost are inspectable via `npm run report`. +kind: tool +topics: + - providers + - cost +compat: n/a +scope: + - global +tags: + - proxy + - routing + - model-routing + - inference + - scheduling + - cost + - opencode diff --git a/data/projects/scvd-general-store.yaml b/data/projects/scvd-general-store.yaml new file mode 100644 index 0000000..81470e1 --- /dev/null +++ b/data/projects/scvd-general-store.yaml @@ -0,0 +1,37 @@ +name: SCVD General Store +repo: https://github.com/seancrecord/scvd-general-store-repo +homepage: https://scvd.store +tagline: Skills and MCP tools for checking x402 endpoints before payment and signed receipts afterward +description: An evidence observatory for agentic commerce with portable skills and a remote MCP service. OpenCode can load the verification skill and run a free endpoint preflight without a wallet or API key. Guidance covers signed-receipt checks and the limits of unpaid observations. Optional paid observations require an explicit spending decision; installation grants no payment authority. +kind: mcp-server +topics: + - integrations +compat: n/a +scope: + - project +tags: + - skills + - mcp + - x402 + - verification +installation: | + From a reviewed checkout of the source repository, copy + `skills/scvd-general-store` and `skills/scvd-x402-verification` into your + project's `.opencode/skills/` directory, keeping each SKILL.md unchanged. + Merge this remote server into your existing OpenCode configuration: + + ```json + { + "mcp": { + "scvd-general-store": { + "type": "remote", + "url": "https://scvd.store/mcp", + "enabled": true + } + } + } + ``` + + Ask OpenCode to load `scvd-x402-verification` and run the free + `preflight_endpoint` for a URL. Inspect the returned verdict, reached level + and missing evidence. An unpaid reading does not prove payment or delivery. diff --git a/data/projects/sdlc-assist.yaml b/data/projects/sdlc-assist.yaml new file mode 100644 index 0000000..56ac3ee --- /dev/null +++ b/data/projects/sdlc-assist.yaml @@ -0,0 +1,20 @@ +name: SDLC-Assist +repo: https://github.com/PapiScholz/SDLC-Assist +tagline: SDLC phase router skill - infers the phase from the repo, asks one question, hands off +description: Agent skills that tell opencode which SDLC phase a request is in (analysis, planning, development, testing, deployment) from what the repo already contains, show the evidence, ask one confirmation and route to spec-driven-development, a QA gate and a release skill. Node only, no dependencies. +kind: skill +topics: + - workflow + - providers +compat: n/a +scope: + - global +tags: + - skills + - sdlc + - spec-driven-development +installation: | + ```bash + cd ~ && npx skills add PapiScholz/SDLC-Assist + ``` + Installs the skills into `~/.config/opencode/skills`. Optional `/sdlc-phase` command: copy `.opencode/command/sdlc-phase.md` from the repo to `~/.config/opencode/command/`. diff --git a/data/projects/semantic-search-mcp.yaml b/data/projects/semantic-search-mcp.yaml new file mode 100644 index 0000000..ebdb5ab --- /dev/null +++ b/data/projects/semantic-search-mcp.yaml @@ -0,0 +1,8 @@ +name: semantic-search-mcp +repo: https://github.com/Zulaxy/semantic-search-mcp +tagline: Semantic code search MCP server - find code by meaning across thousands of files +description: Adds semantic code search to OpenCode. Find code by meaning across 6,900+ files in 2 seconds. 100% local 80MB model (bge-small-en-v1.5), zero API calls. Function-level extraction for PHP, JS, TS, Python, Go, Rust, Java. Hybrid scoring (70% embedding + 30% keyword), TUI config wizard, live progress bar, per-project caching. +kind: mcp-server +topics: + - code-intel +compat: n/a diff --git a/data/projects/session-coherence.yaml b/data/projects/session-coherence.yaml new file mode 100644 index 0000000..987a7d1 --- /dev/null +++ b/data/projects/session-coherence.yaml @@ -0,0 +1,9 @@ +name: Session Coherence +repo: https://github.com/OutcomeFocusAi/session-coherence +tagline: Cross-tool session memory for AI coding assistants +description: Cross-tool session memory for AI coding assistants. One markdown chronicle shared by 9 tools (Claude Code, Cursor, Codex, Gemini CLI, Aider, and more). Zero dependencies, ~300 token fixed cost, 100% local. +kind: tool +topics: + - memory + - sessions +compat: n/a diff --git a/data/projects/showagent.yaml b/data/projects/showagent.yaml new file mode 100644 index 0000000..f63bf3e --- /dev/null +++ b/data/projects/showagent.yaml @@ -0,0 +1,8 @@ +name: showagent +repo: https://github.com/aytzey/showagent +tagline: Browse OpenCode history and copy conversation messages between coding agents. +description: A terminal picker, CLI, and MCP server for local coding-agent sessions. Browse OpenCode sessions alongside Codex, Claude Code, Gemini CLI, jcode, and Pi; preview message transfers and create new native sessions. OpenCode operations use the installed OpenCode CLI. Transfers preserve original sessions and copy extracted user and assistant messages, excluding tool and runtime state. +kind: mcp-server +topics: + - sessions +compat: n/a diff --git a/data/projects/solenta.yaml b/data/projects/solenta.yaml new file mode 100644 index 0000000..57b02ba --- /dev/null +++ b/data/projects/solenta.yaml @@ -0,0 +1,8 @@ +name: Solenta +repo: https://github.com/currentbits/solenta +tagline: Desktop app for OpenCode and other coding agents with one shared local memory +description: A local-first desktop app (macOS, Windows, Linux) that runs OpenCode, Claude Code, Codex, Cursor, Kimi and Grok threads in git worktrees. A local memory server is injected into every session over MCP, so what one thread learns the next one knows; the plan is your GitHub issues, with Git review, terminal and browser panes, and verify-gated completion. +kind: client +topics: + - memory +compat: n/a diff --git a/data/projects/specralph.yaml b/data/projects/specralph.yaml new file mode 100644 index 0000000..31744f6 --- /dev/null +++ b/data/projects/specralph.yaml @@ -0,0 +1,8 @@ +name: SpecRalph +repo: https://github.com/iyaki/specralph +tagline: Spec-Driven Ralph-Wiggum AI coding automation CLI +description: AI Loops runner for OpenCode and other agent CLIs. Enables spec-driven development workflows with structured prompt engineering and loop automation for AI coding agents. +kind: tool +topics: + - workflow +compat: n/a diff --git a/data/projects/springbrand.yaml b/data/projects/springbrand.yaml new file mode 100644 index 0000000..107102c --- /dev/null +++ b/data/projects/springbrand.yaml @@ -0,0 +1,50 @@ +name: SpringBrand +repo: https://github.com/springbrand-lab/springbrand-agent-setup +homepage: https://springbrand.ai +tagline: Remote MCP server with go-to-market tools for agents +description: |- + Hosted remote MCP server that gives OpenCode go-to-market tools: social + listening, traffic and SEO research, lead discovery, and creator discovery. + + Exposes five tools — search_tools, get_tool_schemas, execute_tools, + manage_connections, and get_execution — so the agent discovers and calls + capabilities on demand instead of loading every tool schema into context. + + Transport is Streamable HTTP. Auth is OAuth 2.1 with Dynamic Client + Registration (RFC 7591) and PKCE, which OpenCode handles automatically on the + first 401, so no API key goes in the config file. +kind: mcp-server +topics: + - domain +compat: n/a +tags: + - mcp + - remote-mcp + - oauth + - seo + - social-listening + - lead-generation +installation: | + Add the server to `opencode.json` (project) or + `~/.config/opencode/opencode.json` (global): + + ```json + { + "$schema": "https://opencode.ai/config.json", + "mcp": { + "springbrand": { + "type": "remote", + "url": "https://connector.springbrand.ai/mcp", + "enabled": true + } + } + } + ``` + + No `headers` entry is needed. The server answers unauthenticated requests + with `401` plus a `WWW-Authenticate` challenge, so OpenCode starts its OAuth + flow on first use. To trigger it manually: + + ```bash + opencode mcp auth springbrand + ``` diff --git a/data/projects/squirrelscan.yaml b/data/projects/squirrelscan.yaml new file mode 100644 index 0000000..c861c43 --- /dev/null +++ b/data/projects/squirrelscan.yaml @@ -0,0 +1,22 @@ +name: squirrelscan +repo: https://github.com/squirrelscan/squirrelscan +homepage: https://squirrelscan.com +tagline: Website audit CLI, MCP server and skill for coding agents (SEO, performance, security, accessibility) +description: CLI website audit tool built for coding agents. Runs 260+ rules across SEO, performance, security, accessibility and agent experience, and hands the agent exact, source-mapped fixes. Works with OpenCode via MCP (hosted https://mcp.squirrelscan.com/mcp with OAuth, or local `squirrel mcp` over stdio) to run audits, read reports and fix findings, or via the agent-skills format with `npx skills add squirrelscan/squirrelscan`. Free local audits, GitHub Action, MIT CLI and rules. +kind: tool +also: + - mcp-server +topics: + - code-quality + - web +compat: n/a +tags: + - mcp + - skills + - seo + - audit + - accessibility + - performance +installation: | + curl -fsSL https://squirrelscan.com/install.sh | bash + npx skills add squirrelscan/squirrelscan diff --git a/data/projects/stacktree.yaml b/data/projects/stacktree.yaml new file mode 100644 index 0000000..38dfaed --- /dev/null +++ b/data/projects/stacktree.yaml @@ -0,0 +1,43 @@ +name: Stacktree +repo: https://github.com/stevysmith/stacktree-skill +homepage: https://stacktr.ee/agents +tagline: Publish HTML from your agent to a private, unguessable link +description: Turns HTML an agent produced into a link a person can open — a report, a dashboard, a brief. Links are unguessable and uncrawlable by default, with an optional passcode and expiry, and republishing replaces the page in place so a shared URL stays current. Connects as a local MCP server, and the skill is fetchable over HTTP so it stays current without reinstalling. Free anonymous pages need no account at all; agents with a wallet can pay per page over x402 instead of signing up. +kind: mcp-server +topics: + - integrations +compat: n/a +scope: + - global + - project +tags: + - mcp + - skills + - hosting + - publishing + - html + - sharing + - x402 +installation: | + Skill over HTTP (always current, no install): + + ```json + { "skills": { "urls": ["https://stacktr.ee/.well-known/skills/"] } } + ``` + + MCP server (adds publish/update tools): + + ```json + { + "mcp": { + "stacktree": { + "type": "local", + "command": ["npx", "-y", "stacktree-mcp"], + "enabled": true, + "environment": { "STACKTREE_API_KEY": "{env:STACKTREE_API_KEY}" } + } + } + } + ``` + + Or run `npx stacktree-install` and pick OpenCode, which writes both. diff --git a/data/projects/staffetta.yaml b/data/projects/staffetta.yaml new file mode 100644 index 0000000..b8a091b --- /dev/null +++ b/data/projects/staffetta.yaml @@ -0,0 +1,16 @@ +name: staffetta +repo: https://github.com/RaffaeleSpezia/staffetta +tagline: "Model-decided context handoff: close a milestone, write memory to disk, restart with a clean session" +description: "A relay-race alternative to compaction for long-running agents. Instead of a threshold rewriting the conversation in place, the agent itself decides when a milestone is closed, writes what the next session needs to disk, and hands over — the session ends and a fresh one picks up the baton. Memory lives in files (MEMORY.md overwritten, JOURNAL.md append-only, AGENTS.md for rules), so it is readable, diffable, correctable and survives the session. Four tools the agent calls itself: checkpoint (verifies by checksum that memory actually changed, rejects journal entries with no numbers in them, detects tampering with older entries), ask (pauses for a human decision, requires the agent to state what it would do without an answer), resume (refuses until the decision is written down), and loop (reopens the session and nothing else — it ends when the model declares --done or --blocked, not when a counter infers it). Measured on a local KAT-Coder V2.5 via llama.cpp: 7 milestones closed autonomously, 7 of 7 checkpoints invoked unprompted, 587 tests green, ~5,500 tokens of context per round instead of a compacted session restarting from 142,000 — and it does not grow across rounds. Pure bash, no dependencies; adapters/opencode/loop.sh is the opencode adapter and everything under core/ works with any agent that can run a shell command." +kind: tool +topics: + - context + - memory +compat: n/a +tags: + - context-management + - memory + - long-running-agents + - autonomous-agents + - handoff + - bash diff --git a/data/projects/supamem.yaml b/data/projects/supamem.yaml index b6208bc..5f1b7c2 100644 --- a/data/projects/supamem.yaml +++ b/data/projects/supamem.yaml @@ -2,3 +2,9 @@ name: supamem repo: https://github.com/dzmitrys-dev/supamem/ tagline: Project-agnostic dual-memory MCP CLI for OpenCode description: Adds semantic memory (Qdrant tuned hybrid retrieval — RRF fusion of dense MiniLM + sparse BM25) and structural memory hooks to OpenCode via MCP. Ships an installer that wires `qdrant-find` / `qdrant-store` tools and a snapshot hook into your project's OpenCode config. Python 3.12+, MIT, on PyPI as `supamem`. +kind: tool +also: + - mcp-server +topics: + - memory +compat: n/a diff --git a/data/projects/superlocalmemory.yaml b/data/projects/superlocalmemory.yaml new file mode 100644 index 0000000..4a473c2 --- /dev/null +++ b/data/projects/superlocalmemory.yaml @@ -0,0 +1,8 @@ +name: SuperLocalMemory +repo: https://github.com/qualixar/superlocalmemory +tagline: The governed memory brain for every AI agent. It lives on your machine. +description: Local-first memory for AI agents, added to OpenCode as an MCP server in opencode.json. It recalls what was saved, keeps it true over time, and answers that it does not have the answer instead of guessing. +kind: mcp-server +topics: + - memory +compat: n/a diff --git a/data/projects/swarmclaw.yaml b/data/projects/swarmclaw.yaml index 1c5d5d4..1fcf585 100644 --- a/data/projects/swarmclaw.yaml +++ b/data/projects/swarmclaw.yaml @@ -2,3 +2,7 @@ name: SwarmClaw repo: https://github.com/swarmclawai/swarmclaw tagline: Self-hosted multi-agent runtime with first-class OpenCode delegation description: Self-hosted runtime for autonomous AI agents with heartbeats, schedules, delegation, memory, runtime skills, and reviewed conversation-to-skill learning. Orchestrates OpenCode alongside Claude Code, Codex, Gemini CLI, Copilot CLI, Cursor Agent, Goose, Qwen Code, Droid, and 20+ LLM providers. Ships as an Electron desktop app, CLI, and Docker image. MCP-native (server and client). MIT, TypeScript. +kind: tool +topics: + - orchestration +compat: n/a diff --git a/data/projects/swarmvault.yaml b/data/projects/swarmvault.yaml index 7f7ae7b..a33e41b 100644 --- a/data/projects/swarmvault.yaml +++ b/data/projects/swarmvault.yaml @@ -2,3 +2,10 @@ name: SwarmVault repo: https://github.com/swarmclawai/swarmvault tagline: Local-first RAG knowledge base compiler with bundled skill and MCP server description: Turns raw docs, research, and code into a persistent markdown wiki, knowledge graph, and hybrid SQLite FTS + embeddings search. Ships a bundled skill (schema-first, graph-query-first conventions) and an MCP server, so it works with OpenCode, Claude Code, and Codex. Offline heuristic provider by default; optional Ollama for local embeddings. +kind: tool +also: + - mcp-server +topics: + - docs + - memory +compat: n/a diff --git a/data/projects/swe-mux.yaml b/data/projects/swe-mux.yaml new file mode 100644 index 0000000..b39f075 --- /dev/null +++ b/data/projects/swe-mux.yaml @@ -0,0 +1,10 @@ +name: swe-mux +repo: https://github.com/jatoran/swe-mux +homepage: https://swemux.dev +tagline: Run OpenCode sessions side by side with a status each, and on your phone over Tailscale +description: Terminal multiplexer for coding agents. Runs OpenCode (plus Claude Code, Codex and pi) in real terminals on your own machine, shows which session is waiting on you, and serves the same live sessions to your phone over your own Tailscale network. Sessions survive app restarts and updates. +kind: client +topics: + - sessions + - remote +compat: n/a diff --git a/data/projects/telegramcode.yaml b/data/projects/telegramcode.yaml new file mode 100644 index 0000000..8566312 --- /dev/null +++ b/data/projects/telegramcode.yaml @@ -0,0 +1,20 @@ +name: TelegramCode +repo: https://github.com/olosegres/charness +tagline: Telegram bot for OpenCode and Claude Code, run coding agents from your phone +description: Run your coding agents on your own machine or VPS and drive them from Telegram, by voice or text. Each forum topic is its own project session, like terminal tabs on your phone. Self-hosted, no open ports, MIT. +kind: client +topics: + - remote + - voice +compat: n/a +tags: + - telegram + - telegram-bot + - coding-agent + - opencode + - claude-code + - self-hosted + - voice + - vps + - mobile + - remote-development diff --git a/data/projects/tokscale.yaml b/data/projects/tokscale.yaml index 641e307..fdac5cb 100644 --- a/data/projects/tokscale.yaml +++ b/data/projects/tokscale.yaml @@ -1,4 +1,8 @@ name: Tokscale repo: https://github.com/junhoyeo/tokscale tagline: Token usage tracking CLI -description: A CLI tool for tracking token usage from OpenCode and other coding agents (Claude Code, Codex, Gemini CLI, and Cursor IDE). \ No newline at end of file +description: A CLI tool for tracking token usage from OpenCode and other coding agents (Claude Code, Codex, Gemini CLI, and Cursor IDE). +kind: tool +topics: + - cost +compat: n/a diff --git a/data/projects/tree-ring-memory.yaml b/data/projects/tree-ring-memory.yaml new file mode 100644 index 0000000..e93eb96 --- /dev/null +++ b/data/projects/tree-ring-memory.yaml @@ -0,0 +1,30 @@ +name: Tree Ring Memory +repo: https://github.com/TerminallyLazy/Tree-Ring-Memory +homepage: https://terminallylazy.github.io/Tree-Ring-Memory/ +tagline: Local-first memory lifecycle CLI for AI agents +description: Rust-native memory lifecycle layer for AI agents with project-scoped SQLite/FTS recall, forgetting, audit, consolidation, DOX/Revolve sync adapters, terminal TUI, and agent-framework discovery for OpenCode-style workflows. +kind: tool +topics: + - memory +compat: n/a +scope: + - global + - project +tags: + - memory + - local-first + - cli + - rust + - opencode + - ai-agents +installation: | + Install globally: + ```bash + curl -fsSL https://raw.githubusercontent.com/TerminallyLazy/Tree-Ring-Memory/main/install.sh | sh + ``` + + Initialize project-local memory: + ```bash + tree-ring init + tree-ring integrations scan --source-root . + ``` diff --git a/data/projects/trustless.yaml b/data/projects/trustless.yaml new file mode 100644 index 0000000..ed05d3c --- /dev/null +++ b/data/projects/trustless.yaml @@ -0,0 +1,8 @@ +name: trustless +repo: https://github.com/ikkun1222/trustless +tagline: Credential broker CLI — injects secrets into subprocesses and proxies so AI agents never see plaintext keys +description: trustless decouples AI agents from credentials. Agents reference secrets by name; the broker resolves them at the process or transport layer with output sanitization, integrated DLP (outbound redaction), OAuth token refresh, structured audit logs, and pass/Bitwarden backends. Zero-dependency single binary with bundled agent skills for OpenCode, Claude Code, Codex, and Hermes. +kind: tool +topics: + - security +compat: n/a diff --git a/data/projects/uizze.yaml b/data/projects/uizze.yaml new file mode 100644 index 0000000..6b14563 --- /dev/null +++ b/data/projects/uizze.yaml @@ -0,0 +1,9 @@ +name: UIZZE +repo: https://github.com/uizze/uizze +tagline: UI quality workflow for OpenCode with an optional authenticated MCP +description: Help OpenCode avoid generic UI with a free anti-UI-slop Agent Skill and an optional authenticated UIZZE MCP for focused UI references from 800,000+ real web and iOS screens. +kind: skill +topics: + - code-quality + - ui +compat: n/a diff --git a/data/projects/universal-agent-plugins.yaml b/data/projects/universal-agent-plugins.yaml new file mode 100644 index 0000000..b900106 --- /dev/null +++ b/data/projects/universal-agent-plugins.yaml @@ -0,0 +1,8 @@ +name: Universal Agent Plugins +repo: https://github.com/777genius/universal-agent-plugins +tagline: Manage Agent Plugins across OpenCode and other AI coding agents +description: A cross-platform CLI for installing, updating, repairing, and removing Agent Plugins 1.0 across OpenCode, Codex, Claude Code, Cursor, Gemini CLI, and other compatible agents. It also includes tools and an SDK for building portable plugins. +kind: tool +topics: + - environment +compat: n/a diff --git a/data/projects/universal-llm-proxy.yaml b/data/projects/universal-llm-proxy.yaml index c9d77dd..0a09afb 100644 --- a/data/projects/universal-llm-proxy.yaml +++ b/data/projects/universal-llm-proxy.yaml @@ -1,7 +1,11 @@ name: Universal LLM API Proxy repo: https://github.com/Mirrowel/LLM-API-Key-Proxy tagline: Universal multi-model proxy and library - made with Opencode community -description: "Universal LLM Gateway: One API, every LLM. OpenAI/Anthropic-compatible endpoints with multi-provider translation and intelligent load-balancing. Works with any application that supports custom OpenAI/Anthropic base URLs—no code changes required in your existing tools. Best support for Antigravity/Gemini CLI out of the competition. Deploy anywhere. Opencode Discord discussion" +description: "Universal LLM Gateway: One API, every LLM. OpenAI/Anthropic-compatible endpoints with multi-provider translation and intelligent load-balancing. Works with any application that supports custom OpenAI/Anthropic base URLs—no code changes required in your existing tools. Best support for Antigravity/Gemini CLI out of the competition. Deploy anywhere." +kind: tool +topics: + - providers +compat: n/a tags: - desktop - application @@ -10,4 +14,4 @@ tags: - api - proxy - gateway - - community \ No newline at end of file + - community diff --git a/data/projects/unship.yaml b/data/projects/unship.yaml index 2c5a16f..bb142ee 100644 --- a/data/projects/unship.yaml +++ b/data/projects/unship.yaml @@ -2,3 +2,8 @@ name: Unship repo: https://github.com/mbenhard/unship tagline: Compare AI-made UI variants locally description: Local CLI and browser picker for comparing temporary UI variants created by coding agents like OpenCode, then keeping one and cleaning up the rest. +kind: tool +topics: + - ui + - code-quality +compat: n/a diff --git a/data/projects/vestige.yaml b/data/projects/vestige.yaml index b2f4358..7ff2985 100644 --- a/data/projects/vestige.yaml +++ b/data/projects/vestige.yaml @@ -1,7 +1,12 @@ name: Vestige repo: https://github.com/samvallad33/vestige +homepage: https://github.com/samvallad33/vestige tagline: Local persistent memory for OpenCode agents description: Adds local and project-scoped MCP memory to OpenCode, so agents can remember decisions, preferences, architecture context, and previous fixes across sessions. +kind: tool +topics: + - memory +compat: n/a scope: - global - project @@ -12,7 +17,6 @@ tags: - opencode - ai-agents min_version: 1.16.2 -homepage: https://github.com/samvallad33/vestige installation: | npm install -g vestige-mcp-server@latest npx @vestige/init diff --git a/data/projects/vibe-kanban.yaml b/data/projects/vibe-kanban.yaml index dd393ff..04a1b80 100644 --- a/data/projects/vibe-kanban.yaml +++ b/data/projects/vibe-kanban.yaml @@ -2,3 +2,8 @@ name: Vibe Kanban repo: https://github.com/BloopAI/vibe-kanban tagline: Manage AI in parallel description: A Kanban board to manage and orchestrate AI coding agents in parallel. +kind: client +topics: + - orchestration + - workflow +compat: n/a diff --git a/data/projects/vsc-opencode-gui.yaml b/data/projects/vsc-opencode-gui.yaml new file mode 100644 index 0000000..c060305 --- /dev/null +++ b/data/projects/vsc-opencode-gui.yaml @@ -0,0 +1,19 @@ +name: VSC OpenCode GUI +repo: https://github.com/chinese-room-solutions/vsc-opencode-gui +tagline: The opencode agent, native in VS Code - chat in an editor tab instead of a terminal +description: A VS Code extension that runs the opencode agent in an editor tab with command-palette parity and full theme sync. It spawns a headless `opencode serve` and drives it with its own webview UI over HTTP/SSE - feature parity with the opencode app, without leaving the editor. +kind: client +topics: + - ui + - environment +compat: n/a +tags: + - vscode + - extension + - gui + - chat +installation: | + Install from the VS Code Marketplace (search "VSC OpenCode GUI"), or download + the latest `.vsix` from GitHub releases and run + `code --install-extension vsc-opencode-gui-.vsix`. + Requires the `opencode` CLI on PATH. diff --git a/data/projects/wuniq.yaml b/data/projects/wuniq.yaml new file mode 100644 index 0000000..5ee952e --- /dev/null +++ b/data/projects/wuniq.yaml @@ -0,0 +1,8 @@ +name: Wuniq +repo: https://github.com/Wuniq/wuniq-mcp +tagline: Local-first structured project memory for OpenCode through MCP +description: Connects OpenCode to the free Wuniq desktop app through @wuniq/mcp. Wuniq keeps decisions, constraints, intent, and human reasoning in .wuniq files beside project files, then exposes progressive read and sync tools to the model. The public repository includes a validated opencode.json setup and AGENTS.md workflow. No account, cloud storage, or telemetry. +kind: mcp-server +topics: + - memory +compat: n/a diff --git a/data/projects/yoink.yaml b/data/projects/yoink.yaml new file mode 100644 index 0000000..68d9f12 --- /dev/null +++ b/data/projects/yoink.yaml @@ -0,0 +1,11 @@ +name: yoink +repo: https://github.com/MajidRaimi/yoink +tagline: Connect an API-key provider to opencode and 12 other coding harnesses, and switch AI coding logins +description: CLI and macOS menu bar app. Add a provider once (OpenAI, Kimi Code, Moonshot, OpenRouter, DeepSeek, z.ai, Ollama or any OpenAI- or Anthropic-compatible base URL), pick its models, and tick opencode; yoink writes the provider into ~/.config/opencode/opencode.json (or opencode.jsonc, edited in place), alongside pi, codex, Claude Code, Qwen Code, Kilo Code, Droid and others. It also saves and switches Claude Code, ChatGPT (Codex), Kimi Code, Gemini and GitHub Copilot logins. +kind: tool +topics: + - providers +compat: n/a +tags: + - providers + - cli diff --git a/data/resources/ai-agent-automations.yaml b/data/resources/ai-agent-automations.yaml new file mode 100644 index 0000000..4f2e308 --- /dev/null +++ b/data/resources/ai-agent-automations.yaml @@ -0,0 +1,17 @@ +name: AI Agent Automations +repo: https://github.com/ChmaraX/ai-agent-automations +homepage: https://trigger.tools +tagline: Automation prompts for OpenCode, Codex, Claude Code, and Cursor workflows +description: A curated collection of agent automation prompts for real-world engineering and operations workflows. Covers OpenCode, Codex, Claude Code, and Cursor patterns for code maintenance, security reviews, research, support, billing, and work triage. +kind: config +topics: + - prompting + - workflow +compat: n/a +tags: + - automations + - prompts + - workflows + - codex + - claude-code + - cursor diff --git a/data/resources/akephalos.yaml b/data/resources/akephalos.yaml index f5b0ea2..b26ef2d 100644 --- a/data/resources/akephalos.yaml +++ b/data/resources/akephalos.yaml @@ -1,10 +1,12 @@ name: Akephalos repo: https://github.com/sunnja69/akephalos tagline: Local-first markdown passport for portable agent context and memory -description: A local-first, markdown-first `.akephalos` passport for portable - agent preferences, tool notes, rules, project context, and durable memories. - It uses plain files and Git so MCP-capable coding-agent workflows can inspect - and carry context across tools and machines without hosted sync. +description: A local-first, markdown-first `.akephalos` passport for portable agent preferences, tool notes, rules, project context, and durable memories. It uses plain files and Git so MCP-capable coding-agent workflows can inspect and carry context across tools and machines without hosted sync. +kind: tool +topics: + - memory + - context +compat: n/a scope: - project tags: diff --git a/data/resources/baizhi-agent-toolkit.yaml b/data/resources/baizhi-agent-toolkit.yaml new file mode 100644 index 0000000..0b0713c --- /dev/null +++ b/data/resources/baizhi-agent-toolkit.yaml @@ -0,0 +1,33 @@ +name: Baizhi Cloud Agent Toolkit +repo: https://github.com/chaitin/baizhi-agent-toolkit +tagline: Remote web search and page extraction MCP for OpenCode agents +description: "For OpenCode V2, configure a remote MCP server at https://agent-toolkit.app.baizhi.cloud/mcp with oauth disabled and Authorization: Bearer {env:BAIZHI_API_KEY}. It offers web search, page reading, and structured extraction. The linked MIT repository publishes integration configuration and documentation, not the hosted backend. Users need their own Baizhi account and API key; calls may consume paid credits." +kind: mcp-server +topics: + - remote + - web +compat: n/a +tags: + - mcp-server + - web-search + - web-extraction +installation: | + For OpenCode V2, set BAIZHI_API_KEY in the OpenCode process environment and + add this server to opencode.jsonc. Keep the key out of the config file: + + { + "mcp": { + "servers": { + "baizhi": { + "type": "remote", + "url": "https://agent-toolkit.app.baizhi.cloud/mcp", + "oauth": false, + "headers": { + "Authorization": "Bearer {env:BAIZHI_API_KEY}" + } + } + } + } + } + + Run `opencode mcp list` to check the connection before using any tools. diff --git a/data/resources/claude-skills-pro.yaml b/data/resources/claude-skills-pro.yaml new file mode 100644 index 0000000..1fa2922 --- /dev/null +++ b/data/resources/claude-skills-pro.yaml @@ -0,0 +1,8 @@ +name: Claude Skills Pro +repo: https://github.com/Hahaknight/claude-skills-pro +tagline: 15 battle-tested engineering skills (review, testing, debugging, security) that install into OpenCode in one command. +description: A pack of 15 expert-workflow skills - seven-dimension code review, root-cause debugging, tests that catch real bugs, feature specs, security audit, safe refactoring, API design, zero-downtime migrations and more. Each skill encodes trigger conditions, a step-by-step procedure, and hard anti-patterns, so the agent follows senior-engineer discipline automatically. 7 skills are free (MIT). Install into OpenCode via npx skills add Hahaknight/claude-skills-pro --agent opencode. +kind: skill +topics: + - code-quality +compat: n/a diff --git a/data/resources/coding-agent-orchestration.yaml b/data/resources/coding-agent-orchestration.yaml index a9cad3e..a1d9b33 100644 --- a/data/resources/coding-agent-orchestration.yaml +++ b/data/resources/coding-agent-orchestration.yaml @@ -1,4 +1,8 @@ name: Coding Agent Orchestration repo: https://github.com/evermeer/CodingAgentOrchestration tagline: OpenCode Setup Guide / Orchestration -description: An opinionated but practical handbook that argues for treating AI coding tools as a composable, multi-agent system rather than a single assistant, and then walks through how to implement that mindset using OpenCode's CLI, configuration system, and ecosystem (agents, tools, skills, and plugins). +description: An opinionated but practical handbook that argues for treating AI coding tools as a composable, multi-agent system rather than a single assistant, and then walks through how to implement that mindset using OpenCode's CLI, configuration system, and ecosystem (agents, tools, skills, and plugins). +kind: guide +topics: + - orchestration +compat: n/a diff --git a/data/resources/cosmosmith.yaml b/data/resources/cosmosmith.yaml new file mode 100644 index 0000000..54ee00c --- /dev/null +++ b/data/resources/cosmosmith.yaml @@ -0,0 +1,23 @@ +name: Cosmosmith +repo: https://github.com/devnomad-byte/cosmosmith +tagline: Multi-agent workflow initializer with OpenCode adapters +description: Generates AGENTS.md, task.md, proposal/design templates, and adapters for OpenCode, Claude Code, Cursor, Copilot, and Trae so mixed-agent projects can share one governance layer and verification ledger. +kind: config +topics: + - orchestration + - workflow +compat: n/a +scope: + - project +tags: + - agents-md + - workflow + - governance + - adapters + - task-ledger +installation: | + ```bash + npx cosmosmith@latest init --all + ``` + + The initializer creates OpenCode-compatible project guidance alongside AGENTS.md and other tool adapters. diff --git a/data/resources/dataecho-skills.yaml b/data/resources/dataecho-skills.yaml new file mode 100644 index 0000000..77c2efb --- /dev/null +++ b/data/resources/dataecho-skills.yaml @@ -0,0 +1,17 @@ +name: DataEcho Skills +repo: https://github.com/mabuhalib/dataecho +tagline: Deploy files, sites, and Dockerfile apps to live URLs + persistent agent memory, from opencode. +description: Two zero-dependency Agent Skills for the DataEcho platform (dataecho.ai). `dataecho` publishes anything the agent builds — a single file, a static site, or a server-side app via Dockerfile — to a live URL in seconds, with anonymous publishing (24h claim flow), incremental deploys, and private cloud Drives with scoped share tokens. `dataecho-memory` gives the agent durable memory across sessions and machines — an indexed fact store on a private versioned drive with atomic concurrent-safe writes, history/restore, and one-command handoff. Install with `npx skills add mohocp/dataecho`; opencode discovers them via its standard skill paths. Also available as an MCP server (https://dataecho.ai/mcp). +kind: skill +topics: + - integrations +compat: n/a +scope: + - global + - project +tags: + - skills + - deploy + - hosting + - memory + - mcp-server diff --git a/data/resources/debug-log-to-text-file.yaml b/data/resources/debug-log-to-text-file.yaml index a33bfc4..9919f15 100644 --- a/data/resources/debug-log-to-text-file.yaml +++ b/data/resources/debug-log-to-text-file.yaml @@ -2,3 +2,7 @@ name: Debug Log to Text File repo: https://github.com/awesome-opencode/awesome-opencode/discussions/19 tagline: Troubleshooting guide description: How to output a debug log from opencode to a text file for troubleshooting. +kind: guide +topics: + - docs +compat: n/a diff --git a/data/resources/find-mcp.yaml b/data/resources/find-mcp.yaml new file mode 100644 index 0000000..cb6c83e --- /dev/null +++ b/data/resources/find-mcp.yaml @@ -0,0 +1,12 @@ +name: Find MCP +repo: https://github.com/agentage/find-mcp +tagline: Search 17,000+ MCP servers from the official MCP registry +description: Find MCP is an MCP server for discovering other MCP servers. It searches the agentage MCP Catalog, which syncs 17,000+ servers from the official MCP registry (registry.modelcontextprotocol.io), through the mcp_search, mcp_get, and mcp_categories tools. Works with OpenCode as a generic MCP server, either remote over Streamable HTTP (https://catalog.agentage.io/mcp, no auth needed for search) or stdio via npx -y @agentage/find-mcp. +kind: mcp-server +topics: + - integrations +compat: n/a +tags: + - mcp-server + - discovery + - registry diff --git a/data/resources/gotty.yaml b/data/resources/gotty.yaml index 67ea59f..ea61535 100644 --- a/data/resources/gotty.yaml +++ b/data/resources/gotty.yaml @@ -2,3 +2,8 @@ name: GoTTY repo: https://github.com/sorenisanerd/gotty tagline: Turn CLI into Web App description: A simple command-line tool that turns your CLI tools, like opencode, into web applications. +kind: tool +topics: + - remote + - web +compat: n/a diff --git a/data/resources/infer-client-examples.yaml b/data/resources/infer-client-examples.yaml new file mode 100644 index 0000000..3ecad28 --- /dev/null +++ b/data/resources/infer-client-examples.yaml @@ -0,0 +1,16 @@ +name: Infer Client Examples +repo: https://github.com/tarunspandit/infer-client-examples +homepage: https://infer.flow7.org/opencode +tagline: OpenCode configurations for Infer's GPT-6 Astra and GPT-5.6 Sol models +description: Configures Infer as a custom Responses API provider in OpenCode using an environment-based key. Includes Astra and Sol selectors, a standard-library Python client with an output-token cap, and offline tests. Live usage requires paid Infer wallet credit. +kind: config +topics: + - providers +compat: n/a +scope: + - global + - project +tags: + - configuration + - provider + - responses-api diff --git a/data/resources/jev-social.yaml b/data/resources/jev-social.yaml new file mode 100644 index 0000000..f134091 --- /dev/null +++ b/data/resources/jev-social.yaml @@ -0,0 +1,17 @@ +name: Jev Social +repo: https://github.com/socai-io/jev-social +tagline: Browser-grounded social research with Jev and the local socai CLI +description: An OpenCode-compatible Agent Skill that routes an Instagram, TikTok, or LinkedIn research goal through Jev, runs read-only searches with the user's local socai CLI and existing browser session, and returns source-linked evidence plus a Markdown report. Requires Node 20+, a current socai CLI, a browser session, and either OpenRouter Jev or a local System One-compatible endpoint. +kind: skill +topics: + - web + - docs +compat: n/a +scope: + - project +tags: + - agent-skill + - social-research + - browser-automation + - jev +installation: npx skills add https://github.com/socai-io/jev-social/tree/v0.1.10/skills/jev-social --agent opencode diff --git a/data/resources/juhe-skills.yaml b/data/resources/juhe-skills.yaml new file mode 100644 index 0000000..3a242fa --- /dev/null +++ b/data/resources/juhe-skills.yaml @@ -0,0 +1,9 @@ +name: Juhe Skills +repo: https://github.com/Boluo2101/juhe-skills +tagline: Juhe MCP 深度调研与快速查询 skill 集 +description: 提供两个 AI agent skill:juhe-deep-researcher(四档可选深度调研分析,支持轻量/标准/深度/旗舰)和 juhe-quick-researcher(快速全网资讯搜索)。配合 Juhe MCP 远程服务使用,支持 RSS 订阅源检索、文章全文获取、AI 摘要、趋势分析等功能。适用于 OpenCode、Claude Code、Cursor 等支持技能和 MCP 协议的编码 agent。 +kind: skill +topics: + - docs + - web +compat: n/a diff --git a/data/resources/kickstart-opencode.yaml b/data/resources/kickstart-opencode.yaml index 23f78a8..50b3f6d 100644 --- a/data/resources/kickstart-opencode.yaml +++ b/data/resources/kickstart-opencode.yaml @@ -2,3 +2,7 @@ name: kickstart.opencode repo: https://github.com/orionpax1997/kickstart.opencode tagline: A heavily commented OpenCode starter config that teaches you what everything does. description: Inspired by kickstart.nvim. A minimal, well-commented OpenCode configuration designed as a starting point, not a framework. Every decision is explained. Includes free-only models and MCPs, a plan/execute workflow with interview-style clarification, and a careful agent for supervised AI execution. Read it, understand it, make it yours. +kind: config +topics: + - docs +compat: n/a diff --git a/data/resources/looot-mcp-config.yaml b/data/resources/looot-mcp-config.yaml new file mode 100644 index 0000000..f59798d --- /dev/null +++ b/data/resources/looot-mcp-config.yaml @@ -0,0 +1,15 @@ +name: looot MCP config +repo: https://github.com/loootai/looot-agent-integrations +tagline: opencode.json snippet for the looot remote MCP server, 2,500+ data API endpoints +description: A ready opencode.json block that adds the looot remote MCP server (https://api.looot.ai/mcp) with browser sign-in, plus a variant that reads a token from {env:LOOOT_TOKEN}. looot gives an agent one key and one prepaid balance for work-email lookup, enrichment, SERP, backlinks and web page data. The same repo has snippets for other agent platforms and a starter SKILL.md that opencode loads from .agents/skills. +kind: config +topics: + - integrations +compat: n/a +scope: + - global + - project +tags: + - mcp-server + - data + - enrichment diff --git a/data/resources/lwc.yaml b/data/resources/lwc.yaml new file mode 100644 index 0000000..b4b47f7 --- /dev/null +++ b/data/resources/lwc.yaml @@ -0,0 +1,27 @@ +name: LWC +repo: https://github.com/JanYork/llm-wiki-cli +tagline: Source-grounded project memory for OpenCode with an Agent Skill, CLI, and read-only MCP server +description: Local-first project memory for coding agents with bounded recall, source citations, provenance, atomic changesets, and optional document and code graphs. Includes the installable using-lwc Agent Skill and a stdio MCP server exposing one bounded, read-only exploration tool. +kind: mcp-server +topics: + - memory +compat: n/a +scope: + - global + - project +tags: + - agent-memory + - agent-skills + - mcp-server + - knowledge-base +installation: | + ## Agent Skill + ```bash + npx skills add JanYork/llm-wiki-cli --skill using-lwc + ``` + + ## CLI and MCP server + ```bash + npm install --global @i-xor/lwc + lwc serve --mcp + ``` diff --git a/data/resources/meanwhile.yaml b/data/resources/meanwhile.yaml new file mode 100644 index 0000000..13dda70 --- /dev/null +++ b/data/resources/meanwhile.yaml @@ -0,0 +1,8 @@ +name: Meanwhile +repo: https://github.com/vaddisrinivas/meanwhile +tagline: Optional human side quests while OpenCode continues long work +description: A portable Agent Skill that offers one bounded, opt-in learning, recovery, play, or reality-check quest while the coding agent continues. It requires no account, callback, or completion tracking. +kind: skill +topics: + - workflow +compat: n/a diff --git a/data/resources/my-opencode-deepseek-config.yaml b/data/resources/my-opencode-deepseek-config.yaml new file mode 100644 index 0000000..f7048f0 --- /dev/null +++ b/data/resources/my-opencode-deepseek-config.yaml @@ -0,0 +1,17 @@ +name: my-opencode-deepseek-config +repo: https://github.com/znlgis/my-opencode-deepseek-config +tagline: Optimal DeepSeek V4 dual-model config — 11 agents, 15 skills, 25 commands +description: A pure-config, zero-dependency OpenCode configuration optimized for DeepSeek V4 dual-model (Pro + Flash). Includes an orchestrator with 17 intent-gate patterns, delegation decision table, and cost-aware routing; 11 specialized subagents (planner, deep-worker, oracle, reviewer, consultant, ui-builder, explore, librarian, light-orchestrator, generalist); 15 on-demand skills (code-review, spec-workflow, deepwork, reflect, and more); and 25 slash commands. Designed for maximum token efficiency with model-isolated routing, background dispatch, read-only isolation for analysis agents, and execution-only discipline for worker agents. Iterated across 14 versions, continuously incorporating best practices from 6 upstream reference projects. +kind: config +topics: + - providers + - orchestration +compat: n/a +scope: + - global +tags: + - config + - deepseek + - agents + - skills + - token-efficient diff --git a/data/resources/opencode-cn-guide.yaml b/data/resources/opencode-cn-guide.yaml new file mode 100644 index 0000000..1d10140 --- /dev/null +++ b/data/resources/opencode-cn-guide.yaml @@ -0,0 +1,15 @@ +name: OpenCode CN Deployment Guide +repo: https://github.com/lifugui-175/opencode-cn-guide +tagline: Chinese free-tier multi-model deployment guide (DeepSeek/Kimi/Zhipu/SiliconFlow/OpenRouter) + MCP + CN network tips +description: A practical Chinese-language guide for deploying OpenCode in mainland China on a budget. Covers a free-tier model matrix — DeepSeek V4 Flash for daily tasks, Kimi K2.x for coding, GLM-4-Flash / Qwen2.5-7B (permanently free) as fallback, plus OpenRouter free models — along with a ready-to-use opencode.example.json template, MCP (GitHub/ComfyUI) configuration, and mainland-China networking notes (npm mirror, proxy). +kind: guide +topics: + - providers + - docs +compat: n/a +tags: + - guide + - config + - free-tier + - mcp + - china diff --git a/data/resources/opencode-config-starter.yaml b/data/resources/opencode-config-starter.yaml index 1ca9276..fa61084 100644 --- a/data/resources/opencode-config-starter.yaml +++ b/data/resources/opencode-config-starter.yaml @@ -2,3 +2,7 @@ name: Opencode Config Starter repo: https://github.com/jjmartres/opencode tagline: Flexible config starting point description: A powerful custom opencode configuration with agents, commands, rules, skills, and pre-configured MCP server. +kind: config +topics: + - docs +compat: n/a diff --git a/data/resources/opencode-primer.yaml b/data/resources/opencode-primer.yaml new file mode 100644 index 0000000..8b528b5 --- /dev/null +++ b/data/resources/opencode-primer.yaml @@ -0,0 +1,8 @@ +name: OpenCode Primer +repo: https://github.com/wesammustafa/opencode-primer +tagline: Everything you need to know about OpenCode — a verified, release-tracked community guide. +description: A community field guide that goes from first prompt to power use — setup, prompt engineering, custom commands, agent skills, plugins, custom agents, MCP servers, Zen and Go billing, TUI mastery, and headless CI. Ships a worked example .opencode/ directory (agents, commands, plugins, skills), seven drop-in specialist agent prompts, and MCP walkthroughs. Every version pin, price, and flag is verified against the current OpenCode release with a visible last-reviewed date. +kind: guide +topics: + - docs +compat: n/a diff --git a/data/resources/opencode-ultra-setup.yaml b/data/resources/opencode-ultra-setup.yaml new file mode 100644 index 0000000..fb4b738 --- /dev/null +++ b/data/resources/opencode-ultra-setup.yaml @@ -0,0 +1,9 @@ +name: OpenCode Ultra Setup +repo: https://github.com/benogoulart/opencode-ultra-setup +tagline: A full OpenCode setup with a team of 11 agents, persistent memory, context compression, and a real terminal. +description: An "ultra" OpenCode setup combining oh-my-openagent (11 agents with team mode), supermemory (persistent memory), headroom (context compression up to ~57%), opencode-pty (interactive terminal), cited web search, and wakatime metrics. Includes Cortex and GitHub MCPs, an OmniRoute free AI gateway, and Karpathy + anti-slop guidelines in a global AGENTS.md. +kind: config +topics: + - orchestration + - memory +compat: n/a diff --git a/data/resources/outagedeck-mcp.yaml b/data/resources/outagedeck-mcp.yaml new file mode 100644 index 0000000..31000bf --- /dev/null +++ b/data/resources/outagedeck-mcp.yaml @@ -0,0 +1,34 @@ +name: OutageDeck MCP +repo: https://github.com/outagedeck/mcp +homepage: https://outagedeck.com/developers/mcp?utm_source=awesome_opencode&utm_medium=directory&utm_campaign=opencode_mcp +tagline: Vendor-published cloud and SaaS outage checks for OpenCode agents +description: OutageDeck gives OpenCode agents current provider status, incident timelines, and observed uptime history for cloud and SaaS vendors, based on their official status feeds. Its hosted remote MCP server connects without a package, daemon, account, or API key for public status checks, so an agent can rule out dependency outages before changing code. +kind: mcp-server +topics: + - observability + - integrations +compat: n/a +scope: + - global + - project +tags: + - mcp-server + - incident-response + - status-monitoring + - devops +installation: | + Add the remote server to `opencode.json`: + + ```json + { + "$schema": "https://opencode.ai/config.json", + "mcp": { + "outagedeck": { + "type": "remote", + "url": "https://outagedeck.com/api/mcp" + } + } + } + ``` + + Then ask OpenCode: `Check AWS, GitHub, and Cloudflare for active incidents before changing deployment code. use outagedeck` diff --git a/data/resources/pixeltable-mcp.yaml b/data/resources/pixeltable-mcp.yaml new file mode 100644 index 0000000..f1e0827 --- /dev/null +++ b/data/resources/pixeltable-mcp.yaml @@ -0,0 +1,13 @@ +name: Pixeltable Developer MCP +repo: https://github.com/pixeltable/mcp-server-pixeltable-developer +tagline: Local MCP server for Pixeltable applications +description: Local MCP server for Pixeltable, a multimodal data store with incremental computed columns and embedding search for agents. +kind: mcp-server +topics: + - integrations + - media +compat: n/a +tags: + - mcp-server + - multimodal + - database diff --git a/data/resources/repo-cover.yaml b/data/resources/repo-cover.yaml new file mode 100644 index 0000000..8dfaa81 --- /dev/null +++ b/data/resources/repo-cover.yaml @@ -0,0 +1,9 @@ +name: repo-cover +repo: https://github.com/sjh9714/cover-my-repo +tagline: Agent skill that designs your GitHub social preview as one self-contained HTML file +description: The agent writes a 1280x640 og:image card following a constrained design system, with four editorial moods, CJK-first typography, a deterministic checker for contrast and line breaking, and PNG export through headless Chrome. Installs into OpenCode via the Agent Skills CLI. +kind: skill +topics: + - git + - media +compat: n/a diff --git a/data/resources/runapi-mcp.yaml b/data/resources/runapi-mcp.yaml index bc629ad..44c4221 100644 --- a/data/resources/runapi-mcp.yaml +++ b/data/resources/runapi-mcp.yaml @@ -2,6 +2,11 @@ name: RunAPI MCP repo: https://github.com/runapi-ai/mcp tagline: MCP server for model API jobs description: RunAPI MCP lets coding agents discover models, check pricing, and create image, video, music/audio, text-to-speech, and LLM tasks through RunAPI. +kind: mcp-server +topics: + - media + - providers +compat: n/a tags: - mcp-server - model-api diff --git a/data/resources/super-spec.yaml b/data/resources/super-spec.yaml new file mode 100644 index 0000000..7056b3f --- /dev/null +++ b/data/resources/super-spec.yaml @@ -0,0 +1,20 @@ +name: SuperSpec +repo: https://github.com/lbk-open/super-spec +tagline: Requirement or production alert in, reviewed pull request out - 20 skills, one SKILL.md source +description: "A toolkit of 20 Agent Skills that combines the engineering discipline of superpowers with the living spec lifecycle of OpenSpec, and adds the two things neither has: end-to-end workflows that carry a requirement, or a production alert, all the way to a reviewed pull request, and multi-repo orchestration that runs one headless agent per repository. Implementation is dispatched to parallel test-driven subagents; a review panel with distinct lenses (quality, spec and guardrail compliance, cross-module integration) then returns a severity-graded verdict and drives a bounded fix loop until the code is approved. Root-cause analysis is evidence-based rather than a guess: competing hypotheses are falsified against logs, traces, metrics, code and git history before any fix is written. Capability specs follow the OpenSpec directory convention, so a repository initialized by the OpenSpec CLI works as-is. Nothing is written into your project - the guardrails are read in place at runtime, and there is no CLI or state machine to install." +kind: skill +topics: + - workflow + - code-quality +compat: n/a +scope: + - global + - project +tags: + - skills + - workflow + - code-review + - tdd + - multi-agent + - openspec + - spec-driven diff --git a/data/resources/tapetide-mcp.yaml b/data/resources/tapetide-mcp.yaml new file mode 100644 index 0000000..5363d86 --- /dev/null +++ b/data/resources/tapetide-mcp.yaml @@ -0,0 +1,17 @@ +name: Tapetide MCP +repo: https://github.com/Tapetide-hq/nse-bse-indian-stock-market-data-mcp +homepage: https://tapetide.com/mcp +tagline: Indian stock market data (NSE and BSE) for OpenCode agents +description: MCP server that gives OpenCode structured Indian stock market data for about 8,200 NSE and BSE stocks, including quotes, quarterly financials, shareholding, a 326-ratio screener, FII/DII flows, option chains and company filings. Runs locally over stdio via npx with a free personal token, or remotely at https://mcp.tapetide.com/mcp with OAuth. MIT licensed, free plan available. +kind: mcp-server +topics: + - domain +compat: n/a +tags: + - mcp + - finance + - stocks + - india +installation: | + Add to opencode.json under "mcp": + "tapetide": { "type": "local", "command": ["npx", "-y", "tapetide-mcp"], "environment": { "TAPETIDE_TOKEN": "your_token_here" } } diff --git a/data/schema.json b/data/schema.json index b279a3c..29bbb59 100644 --- a/data/schema.json +++ b/data/schema.json @@ -1,19 +1,36 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://github.com/awesome-opencode/awesome-opencode/data/schema.json", + "$id": "https://github.com/Heretek-AI/awesome-opencode/data/schema.json", "title": "Awesome Opencode Entry", - "description": "Schema for validating YAML entries in the awesome-opencode list", + "description": "Schema for validating YAML entries in the Heretek-AI/awesome-opencode list. Cross-entry rules (unique repos, kind per category, compat for plugins) live in scripts/utils/catalog.js.", "type": "object", "properties": { "name": { "type": "string", "minLength": 1, + "maxLength": 80, "description": "Display name of the project or tool" }, "repo": { "type": "string", "format": "uri", - "description": "URL to the repository (https://github.com/...)" + "pattern": "^https://((github\\.com|gitlab\\.com|codeberg\\.org|gitee\\.com)/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+|github\\.com/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+/discussions/[0-9]+|gist\\.github\\.com/[A-Za-z0-9_-]+/[0-9a-f]+)/?$", + "description": "Repository root URL (no /tree/ or /blob/ paths, no npm or marketing pages). Gists and GitHub discussions (for guides) are also accepted. Use `path` for a package inside a monorepo." + }, + "path": { + "type": "string", + "pattern": "^(?!/)(?!.*\\.\\.)(?!.*/$)[A-Za-z0-9_.@/-]+$", + "description": "Subdirectory of `repo` that holds this entry, for monorepos (e.g. packages/my-plugin)" + }, + "npm": { + "type": "string", + "pattern": "^(@[a-z0-9-~][a-z0-9-._~]*/)?[a-z0-9-~][a-z0-9-._~]*$", + "description": "npm package name, for entries installed from npm. Used for the V2 compatibility check and health checks." + }, + "homepage": { + "type": "string", + "format": "uri", + "description": "Documentation URL if different from repository" }, "tagline": { "type": "string", @@ -24,13 +41,99 @@ "description": { "type": "string", "minLength": 1, + "maxLength": 1500, "description": "Full description of the project (shown when expanded)" }, + "kind": { + "type": "string", + "enum": [ + "plugin", + "theme", + "agent", + "skill", + "mcp-server", + "client", + "tool", + "config", + "guide", + "fork" + ], + "description": "What the entry is. plugin: OpenCode plugin package. theme: color theme. agent: agent/subagent configuration. skill: SKILL.md pack. mcp-server: Model Context Protocol server. client: GUI, TUI, web, mobile, editor or chat front-end for OpenCode. tool: CLI, proxy, library or other utility. config: starter config, commands or templates. guide: docs, tutorials or articles. fork: a modified build of OpenCode." + }, + "also": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "plugin", + "theme", + "agent", + "skill", + "mcp-server", + "client", + "tool", + "config", + "guide", + "fork" + ] + }, + "uniqueItems": true, + "maxItems": 3, + "description": "Secondary kinds, e.g. a plugin that also ships an MCP server. Cross-listed in the README and site." + }, + "topics": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "memory", + "context", + "orchestration", + "workflow", + "providers", + "cost", + "notifications", + "sessions", + "code-quality", + "security", + "git", + "remote", + "web", + "ui", + "voice", + "media", + "docs", + "environment", + "observability", + "integrations", + "code-intel", + "prompting", + "domain" + ] + }, + "minItems": 1, + "maxItems": 3, + "uniqueItems": true, + "description": "1-3 use-case topics from a fixed list. The first one is the primary topic used for README grouping." + }, + "compat": { + "type": "string", + "enum": [ + "v2", + "v1", + "n/a", + "unknown" + ], + "description": "OpenCode API generation. v2: depends on @opencode/* (e.g. @opencode/plugin with Plugin.define). v1: legacy @opencode-ai/* only. n/a: does not use the plugin/SDK API. unknown: not yet verified. Required for plugins; CI verifies it." + }, "scope": { "type": "array", "items": { "type": "string", - "enum": ["global", "project"] + "enum": [ + "global", + "project" + ] }, "minItems": 1, "uniqueItems": true, @@ -41,23 +144,25 @@ "items": { "type": "string" }, - "description": "Tags for filtering and discoverability" + "description": "Free-form search keywords. Not rendered; use `topics` for categorization." }, "min_version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+", - "description": "Minimum OpenCode version required (semver format, e.g. '1.0.0')" - }, - "homepage": { - "type": "string", - "format": "uri", - "description": "Documentation URL if different from repository" + "description": "Minimum OpenCode version required (semver format, e.g. '2.0.0')" }, "installation": { "type": "string", "description": "Detailed installation instructions in markdown format" } }, - "required": ["name", "repo", "tagline", "description"], - "additionalProperties": true + "required": [ + "name", + "repo", + "tagline", + "description", + "kind", + "topics" + ], + "additionalProperties": false } diff --git a/data/themes/ayu-dark.yaml b/data/themes/ayu-dark.yaml index b414e2c..8193da4 100644 --- a/data/themes/ayu-dark.yaml +++ b/data/themes/ayu-dark.yaml @@ -1,4 +1,8 @@ name: Ayu Dark repo: https://github.com/postrednik/opencode-ayu-theme tagline: Port of the popular Ayu Dark color scheme with golden yellow accent. -description: Port of the popular Ayu Dark color scheme with golden yellow accent. \ No newline at end of file +description: Port of the popular Ayu Dark color scheme with golden yellow accent. +kind: theme +topics: + - ui +compat: n/a diff --git a/data/themes/charcoal.yaml b/data/themes/charcoal.yaml index 87b15a1..c725314 100644 --- a/data/themes/charcoal.yaml +++ b/data/themes/charcoal.yaml @@ -1,9 +1,13 @@ name: Charcoal repo: https://github.com/VyomJain6904/charcoal-theme -tagline: "Deep-black grayscale theme for OpenCode — no hues, all shades of gray" -description: | +tagline: Deep-black grayscale theme for OpenCode — no hues, all shades of gray +description: |- Charcoal is a pure grayscale theme for OpenCode with a near-black (#0d0d0d) background. All 56 theme color keys use shades of gray — no hues anywhere. Designed to match a minimal dark terminal aesthetic. Also available for bat and Ghostty in the same repository. +kind: theme +topics: + - ui +compat: n/a diff --git a/data/themes/lavi.yaml b/data/themes/lavi.yaml index b2e8cf0..c323bec 100644 --- a/data/themes/lavi.yaml +++ b/data/themes/lavi.yaml @@ -1,4 +1,9 @@ name: Lavi -repo: https://github.com/b0o/lavi/tree/main/contrib/opencode +repo: https://github.com/b0o/lavi +path: contrib/opencode tagline: A soft and sweet colorscheme for Opencode and 15+ other apps description: A soft, sweet dark theme for Opencode with rich purple tones and carefully tuned syntax and diff colors. Part of the Lavi colorscheme family, which also provides matching themes for Neovim, Alacritty, Ghostty, Kitty, Wezterm, Zellij, and other tools, with Nix flake and home-manager support. +kind: theme +topics: + - ui +compat: n/a diff --git a/data/themes/mimocode-theme.yaml b/data/themes/mimocode-theme.yaml new file mode 100644 index 0000000..7033c4e --- /dev/null +++ b/data/themes/mimocode-theme.yaml @@ -0,0 +1,8 @@ +name: MiMoCode Theme +repo: https://github.com/jadmadi/opencode-MiMoCode-Theme +tagline: Warm dark/light OpenCode theme with signature orange accents. +description: MiMoCode is a warm dark/light theme for OpenCode with signature orange accents, ported from the Zed MimoCode-theme. Dark mode uses warm-black surfaces, light mode uses warm cream surfaces. +kind: theme +topics: + - ui +compat: n/a diff --git a/data/themes/moonlight.yaml b/data/themes/moonlight.yaml index 6cf6804..73eab68 100644 --- a/data/themes/moonlight.yaml +++ b/data/themes/moonlight.yaml @@ -2,3 +2,7 @@ name: Moonlight repo: https://github.com/brunogabriel/opencode-moonlight-theme tagline: A moonlight color theme for OpenCode based on the popular moonlight-vscode-theme. description: A moonlight color theme for OpenCode based on the popular moonlight-vscode-theme by atomiks. Features a dark, cool-toned palette inspired by moonlight aesthetics. +kind: theme +topics: + - ui +compat: n/a diff --git a/data/themes/opencode-light-themes.yaml b/data/themes/opencode-light-themes.yaml index 2395b97..0e9da3c 100644 --- a/data/themes/opencode-light-themes.yaml +++ b/data/themes/opencode-light-themes.yaml @@ -2,3 +2,7 @@ name: OpenCode Light Themes repo: https://github.com/fatihtoprakk/opencode-light-themes tagline: A curated collection of 21 light color themes for OpenCode description: The largest collection of light themes for OpenCode. Includes 21 carefully crafted light themes converted from popular VS Code themes — scaefy-light (Atom One Light), Solarized Light, Vivid Light, Coffee Cream, GitHub Light, Quiet Light, Bluloco Light, Brackets Light Pro, NetBeans Light, Ysgrifennwr, Hop Light, GitHub Plus, Classic Light, HC Flurry, all Milkshake variants, and more. Bilingual (EN/TR) documentation and one-command install script included. +kind: theme +topics: + - ui +compat: n/a diff --git a/data/themes/opencode-material-theme.yaml b/data/themes/opencode-material-theme.yaml new file mode 100644 index 0000000..ace496d --- /dev/null +++ b/data/themes/opencode-material-theme.yaml @@ -0,0 +1,8 @@ +name: opencode-material-theme +repo: https://github.com/sandlada/opencode-material-theme +tagline: Material Design 3 themes for the OpenCode TUI. +description: "Material Design 3 themes for the OpenCode TUI: 194 static JSON themes across 9 variants x 12 hues, plain + OLED." +kind: theme +topics: + - ui +compat: n/a diff --git a/data/themes/opencode-vscode-themes.yaml b/data/themes/opencode-vscode-themes.yaml index 69c0994..f518e21 100644 --- a/data/themes/opencode-vscode-themes.yaml +++ b/data/themes/opencode-vscode-themes.yaml @@ -2,3 +2,7 @@ name: VS Code Themes repo: https://github.com/regen45t/opencode-vscode-themes tagline: Ports of all built-in VS Code themes (Modern, Plus, VS, High Contrast). description: OpenCode ports of all built-in VS Code themes from the vscode.theme-defaults extension. Includes vscode-modern, vscode-plus, vscode-vs, and vscode-hc with automatic dark/light variant selection. One-line install script included. +kind: theme +topics: + - ui +compat: n/a diff --git a/data/themes/poimandres-theme.yaml b/data/themes/poimandres-theme.yaml index a43bdb5..190745f 100644 --- a/data/themes/poimandres-theme.yaml +++ b/data/themes/poimandres-theme.yaml @@ -2,3 +2,7 @@ name: Poimandres Theme repo: https://github.com/ajaxdude/opencode-ai-poimandres-theme tagline: Poimandres theme description: Poimandres theme for opencode. +kind: theme +topics: + - ui +compat: n/a diff --git a/discovery/declined.txt b/discovery/declined.txt new file mode 100644 index 0000000..aa41efb --- /dev/null +++ b/discovery/declined.txt @@ -0,0 +1,3 @@ +# Packages or repos the weekly scout should stop suggesting, one per line. +# Use an npm package name (e.g. opencode-foo) or a repo URL (e.g. https://github.com/owner/repo). +# Add a short reason after a '#' so the next maintainer knows why. diff --git a/dist/registry.json b/dist/registry.json index 67f1993..c1ba3a1 100644 --- a/dist/registry.json +++ b/dist/registry.json @@ -6,6 +6,28 @@ "repoUrl": "https://github.com/Cluster444/agentic", "tagline": "Modular AI agents", "description": "Modular AI agents and commands for structured software development with opencode.", + "kind": "agent", + "topics": [ + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "aware-code", + "type": "agents", + "displayName": "AwareCode", + "repoUrl": "https://github.com/Wudi12317/aware-code", + "tagline": "Documentation-aware coding protocol for OpenCode", + "description": "A 5-phase meta-skill that enforces documentation-first coding. Scans project docs before writing code, remembers root causes of errors, reviews code quality and security, synchronizes docs after changes, and outputs structured summaries. Designed for OpenCode's skill system.", + "kind": "skill", + "topics": [ + "docs" + ], + "compat": "n/a", "scope": [ "global" ], @@ -18,6 +40,11 @@ "repoUrl": "https://github.com/VoltAgent/awesome-claude-code-subagents", "tagline": "Claude Code subagents", "description": "Comprehensive reference repository for production-ready Claude Code subagents.", + "kind": "agent", + "topics": [ + "orchestration" + ], + "compat": "n/a", "scope": [ "global" ], @@ -30,6 +57,12 @@ "repoUrl": "https://github.com/antonbabenko/deliberation", "tagline": "Ask GPT, Gemini, Grok, or OpenRouter for a second opinion or a fix, as expert subagents over MCP", "description": "Get a delegated second opinion or an actual fix from GPT (Codex), Gemini, Grok (xAI), or OpenRouter. Seven expert subagents - Architect, Plan Reviewer, Scope Analyst, Code Reviewer, Security Analyst, Researcher, and Debugger - plus the ask-gpt, ask-gemini, ask-grok, ask-openrouter, ask-all, and consensus commands. Each one can advise (read-only) or implement. ask-all asks every model at once and compares the answers; consensus runs an arbiter loop until the models agree.", + "kind": "agent", + "topics": [ + "orchestration", + "providers" + ], + "compat": "n/a", "scope": [ "global", "project" @@ -49,18 +82,109 @@ "repoUrl": "https://github.com/mubaidr/gem-team", "tagline": "Self-Learning Multi-agent orchestration harness for spec-driven development and automated verification.", "description": "Self-Learning Multi-agent orchestration harness for spec-driven development and automated verification.", + "kind": "agent", + "topics": [ + "orchestration", + "workflow" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "goblin-logic-manager", + "type": "agents", + "displayName": "Goblin-Logic-Manager", + "repoUrl": "https://github.com/es-3581100/Goblin-Logic-Manager", + "tagline": "Model-aware OpenCode agent with skill routing, bounded execution, durable closeout, and cold-session recovery.", + "description": "A model-expandable OpenCode development-agent system that separates stable development behavior from thin model-specific overlays, with skill routing, bounded waits, evidence-backed verification, durable chunk closeout, and cold-session recovery.", + "kind": "agent", + "topics": [ + "workflow", + "providers" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "iamhumans", + "type": "agents", + "displayName": "iamhumans", + "repoUrl": "https://github.com/hoainho/iamhumans", + "tagline": "Teaches Claude to stop performing empathy and start being present. 99/100 on a 100-case eval.", + "description": "An opencode skill (~200 lines) that removes sycophancy, lecturing, and performed empathy from Claude's emotional responses. Teaches the shape of human conversation — when to be short, when to sit with something, when the right reply is \"oh.\" Ships with a 100-case eval corpus and a baseline comparison showing +89.4 point skill delta over default Claude (1/20 PASS baseline vs 99/100 with skill). Load for human-shaped conversations (grief, decisions, vent, small talk). Don't load for code generation.", + "kind": "skill", + "topics": [ + "prompting" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "llm-roundtable", + "type": "agents", + "displayName": "llm-roundtable", + "repoUrl": "https://github.com/dinhkarate/llm-roundtable", + "tagline": "Six models from five vendors vote on choices, plans and PRs when an unattended agent would stop to ask you", + "description": "Agent Skill plus a stdlib-only Python script (MIT). When an unattended coding agent would stop to ask its user to choose, approve, or review, it convenes a council through each vendor's CLI: Claude Fable and Opus (claude), GPT (codex), Grok (grok), Gemini (agy), and the newest free OpenCode model (opencode, no login needed). Round 1 is blind, round 2 is an anonymous cross-examination (M1..Mn), peers rate each other's evidence 0-2, and a weighted vote decides with no chairman model; an undecided council falls back to a safe default. Seats run read-only and sandboxed. Review mode returns APPROVE/CHANGES/REJECT for plans and PRs. Runs from OpenCode as the host too; --private drops free-model seats that may train on prompts.", + "kind": "skill", + "topics": [ + "orchestration", + "code-quality" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "skill", + "multi-model", + "council", + "voting", + "code-review" + ], + "homepageUrl": "https://dinhkarate.github.io/llm-roundtable/", + "installation": "```bash\nnpx skills add dinhkarate/llm-roundtable --skill llm-roundtable\nnpx llm-roundtable doctor --probe\n```\n" + }, { "productId": "nerv", "type": "agents", "displayName": "NERV", - "repoUrl": "https://github.com/juanmanueldaza/nerv", + "repoUrl": "https://github.com/juanmanueldaza/n3rv", "tagline": "Invisible engineering infrastructure for AI agents", "description": "Spec-Driven Development pipeline, A2A task delegation hub, persistent semantic memory (MAGI), and 9 specialized subagents for OpenCode. Scaffolds 45+ files via `nerv init` including SDD skills, slash commands, MCP servers, and lifecycle plugins.", + "kind": "agent", + "topics": [ + "workflow", + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-agent-orchestration-kit", + "type": "agents", + "displayName": "OpenCode Agent Orchestration Kit", + "repoUrl": "https://github.com/jcarlosrodicio/opencode-agent-orchestration-kit", + "tagline": "Structured product-development workflows", + "description": "A reproducible OpenCode configuration kit with specialized agents, structured handoffs for research, design, specification, implementation, and review, plus local skills, validation checks, safe installation, and optional design integrations.", + "kind": "skill", + "topics": [ + "orchestration", + "workflow" + ], + "compat": "n/a", "scope": [ "global" ], @@ -70,9 +194,14 @@ "productId": "opencode-agents", "type": "agents", "displayName": "Opencode Agents", - "repoUrl": "https://github.com/darrenhinde/opencode-agents", + "repoUrl": "https://github.com/darrenhinde/OpenAgentsControl", "tagline": "Enhanced workflows", "description": "A set of opencode configurations, prompts, agents, and plugins for enhanced development workflows.", + "kind": "agent", + "topics": [ + "workflow" + ], + "compat": "v1", "scope": [ "global" ], @@ -85,11 +214,62 @@ "repoUrl": "https://github.com/BackGwa/Redstone", "tagline": "AI-built Minecraft plugins", "description": "an Opencode agent that simplifies Minecraft plugin development and deployment.", + "kind": "agent", + "topics": [ + "domain" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "opencode-roundtable", + "type": "agents", + "displayName": "opencode-roundtable", + "repoUrl": "https://github.com/NeoMei/opencode-roundtable", + "tagline": "Multi-agent roundtable discussion skill with per-member model routing and meeting minutes", + "description": "A roundtable discussion (圆桌讨论) skill for opencode — TUI, CLI and Desktop. Pick members one by one via inline cards (role, persona, model — any provider); each member is a real subagent run via opencode run -m provider/model, a neutral host summarizes each round, and on termination a structured meeting-minutes Markdown file is written. Uses only built-in primitives — no plugin required.", + "kind": "skill", + "topics": [ + "orchestration", + "providers" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "pdca-skills", + "type": "agents", + "displayName": "PDCA Skills", + "repoUrl": "https://github.com/AlexeyShirshov/skills", + "tagline": "PDCA orchestration skills: PLAN → DO → CHECK → ACT with evidence-based verification", + "description": "A family of four OpenCode skills that drive a task through a PDCA cycle\n(PLAN → DO → CHECK → ACT) with transition gates, evidence-based verification,\nescalation accounting, durable status, and recovery after compaction.\n\n- **pdca** — domain-neutral cycle; the task's PLAN selects the means and the verification method.\n- **pdca-coder** — stack-agnostic executor for software tasks (code, tests, docs, refactoring, config).\n- **pdca-dotnet** — the same cycle tuned for .NET/C# repositories.\n- **pdca-collection** — a batch of tasks run as parallel PDCA lanes (worktree per group, `--no-ff` merge of completed groups).\n\nRoles (planner, coder, check, scout, escalate) are bound by the host, so the\nskills stay model- and provider-neutral.", + "kind": "skill", + "topics": [ + "workflow", + "code-quality" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "skills", + "pdca", + "orchestration", + "subagents", + "workflow", + "verification" + ], + "installation": "Copy the skills you want into an OpenCode skills directory.\n\nGlobal (all projects):\n```sh\ngit clone https://github.com/AlexeyShirshov/skills\ncp -r skills/opencode/pdca skills/opencode/pdca-coder \\\n skills/opencode/pdca-dotnet skills/opencode/pdca-collection \\\n ~/.config/opencode/skills/\n```\n\nPer project:\n```sh\nmkdir -p .opencode/skills\ncp -r skills/opencode/pdca* .opencode/skills/\n```\n\nInvoke a skill by name, for example `pdca-coder` for \"by the cycle\" code tasks.\n", + "minVersion": "1.0.0" + }, { "productId": "python-agent", "type": "agents", @@ -97,6 +277,54 @@ "repoUrl": "https://github.com/amrahman90/python-expert-agent", "tagline": "Python Expert Agent toolkit for OpenCode with subagents and skills", "description": "A custom configurable agent toolkit includes 1 Primary Custom Agent python-expert with intelligent skill loading, Predefined Specialized Subagents for Code generation, review, testing, and exploration, On-Demand Skills for Python development projects, Context Files for Standards, patterns, and security guidelines.", + "kind": "agent", + "topics": [ + "code-intel" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "review-pro", + "type": "agents", + "displayName": "review-pro", + "repoUrl": "https://github.com/tufantunc/review-pro", + "tagline": "Tiered code review - triage picks the relevant specialists, they run in parallel, synthesis returns one verdict", + "description": "Splits code review into three stages. A triage pass classifies the diff and selects which of thirteen specialist reviewers to dispatch - security, correctness, craft, ai-antipatterns, dry, performance, backend, frontend, a11y, db, api-contract, tests, spec - each with its own rubric and scoped context. The selected reviewers run in parallel, then a synthesis pass dedups overlapping findings, resolves conflicts by domain ownership, calibrates severity, and emits one verdict. Sixteen stack packs add language and framework specific signals from the repository's .review-pro/ directory.", + "kind": "agent", + "topics": [ + "code-quality", + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "code-review", + "subagents", + "skills", + "security", + "ai-code" + ] + }, + { + "productId": "sec-af", + "type": "agents", + "displayName": "SEC-AF", + "repoUrl": "https://github.com/Agent-Field/sec-af", + "tagline": "Multi-agent security auditor — orchestrates a 250+ agent swarm that proves exploitability, SARIF for CI", + "description": "Multi-agent security auditor. Orchestrates a 250+ agent swarm to find vulnerabilities and prove they're exploitable — not just flag patterns. SARIF output for GitHub Actions integration. Apache 2.0.", + "kind": "agent", + "topics": [ + "security", + "orchestration" + ], + "compat": "n/a", "scope": [ "global" ], @@ -109,6 +337,11 @@ "repoUrl": "https://github.com/workdocyeye/server-manager", "tagline": "Non-blocking background server management — start, track, and stop local dev servers without blocking your AI session.", "description": "Start, track, and stop local dev servers in the background — without blocking your AI conversation. Supports Node.js, Python, Go, .NET, Java, Rust, PHP and any framework that runs a dev server. JSON state persistence, per-project log files, HTTP health checks, and log tail/grep for debugging.", + "kind": "agent", + "topics": [ + "environment" + ], + "compat": "n/a", "scope": [ "global", "project" @@ -123,13 +356,146 @@ "homepageUrl": "https://github.com/workdocyeye/server-manager", "installation": "Download the entire `server-manager/` folder into your AI coding tool's skills directory:\n- OpenCode: `~/.config/opencode/skills/server-manager/`\n- Claude Code: `~/.claude/skills/server-manager/`\n- Project-level: `.opencode/skills/` or `.claude/skills/` in your project root\n" }, + { + "productId": "shipframe", + "type": "agents", + "displayName": "ShipFrame", + "repoUrl": "https://github.com/juanitourquiza/shipframe", + "tagline": "AI coding workflows for OpenCode, Claude Code, and Codex", + "description": "AI coding workflow toolkit with installable OpenCode skills, converted agents, project profiles, release evidence, and disciplined PR/MR workflows.", + "kind": "skill", + "topics": [ + "workflow" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "workflow", + "skills", + "agents", + "release", + "codex", + "claude-code" + ], + "homepageUrl": "https://shipframe.hackeruna.com/" + }, + { + "productId": "strray", + "type": "agents", + "displayName": "StringRay", + "repoUrl": "https://github.com/htafolla/StringRay", + "tagline": "OpenCode orchestration framework with AI agents", + "description": "A production-ready orchestration framework for OpenCode with multi-agent coordination, enforcement pipeline, codex compliance, and intelligent task routing. Includes 21 built-in processors, 60+ codex validators, and autonomous reporting.", + "kind": "agent", + "topics": [ + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "swe-af", + "type": "agents", + "displayName": "SWE-AF", + "repoUrl": "https://github.com/Agent-Field/SWE-AF", + "tagline": "Autonomous software engineering agent team — orchestrates a 400+ agent swarm for planning, coding, testing, and review", + "description": "Autonomous software engineering agent team. Orchestrates a 400+ agent swarm across the full development lifecycle from a single API call. Apache 2.0.", + "kind": "agent", + "topics": [ + "orchestration", + "workflow", + "code-quality" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "accint", + "type": "plugins", + "displayName": "AccInt", + "repoUrl": "https://github.com/maxbaluev/accreted-intelligence", + "tagline": "Local Work Model memory for OpenCode agents", + "description": "Accreted scored memory for OpenCode sessions with MCP retrieval and action verbs, lifecycle hooks, and cross-project acc.db continuity for agent work.", + "kind": "plugin", + "topics": [ + "memory" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "aegis-devops", + "type": "plugins", + "displayName": "Aegis-DevOps", + "repoUrl": "https://github.com/moneytool/aegis-devops", + "tagline": "Blocks kubectl delete, terraform destroy or DROP TABLE unless your signed policy allows it", + "description": "A tool.execute.before plugin that checks every bash command OpenCode wants to run (kubectl, terraform/tofu, aws/az/gcloud, helm, argocd, git, SQL) against a signed, authority-checked policy before it runs. A rule only counts if it hasn't been edited since it was signed and its author was allowed to write that kind of rule, so a line planted in a ticket can't become policy. Only active in projects with a .aegis/ policy. Install with `pip install aegis-devops && aegis install opencode`.", + "kind": "plugin", + "topics": [ + "security" + ], + "compat": "v1", + "scope": [ + "global", + "project" + ], + "tags": [ + "security", + "devops", + "kubernetes", + "terraform", + "guardrails" + ] + }, + { + "productId": "aftermath", + "type": "plugins", + "displayName": "Aftermath", + "repoUrl": "https://github.com/moah0911/aftermath", + "tagline": "Post-failure recovery for agents — stop, revert cheap damage, return to last-known-good", + "description": "Aftermath is a post-failure recovery skill for OpenCode. When something breaks — a test suite goes green to red, the same error recurs, a destructive command looms, or the user says \"you broke it\" — it stops forward motion, reverts the actual bad hunk instead of patching around it, and returns the session to last-known-good. Includes four intensity levels (lite/full/ultra/off), four slash commands (status, revert, audit, log), and lifecycle tripwires for test failures, repeat errors, and destructive commands.", + "kind": "plugin", + "topics": [ + "security", + "workflow" + ], + "compat": "v1", + "scope": [ + "global", + "project" + ], + "tags": [ + "productivity", + "testing", + "debugging", + "safety" + ], + "installation": "## Prerequisites\n- OpenCode 1.0.0 or later\n- Node.js 18+\n- git\n\n## Installation\n\n### Via curl (global)\n```bash\ncurl -fsSL https://raw.githubusercontent.com/moah0911/aftermath/main/scripts/install.sh \\\n | bash -s --\n```\n\n### Via npm\nAdd to your `opencode.json`:\n```json\n{ \"plugin\": [\"@moah0911/aftermath\"] }\n```\n\n### Project-only\n```bash\ngit clone https://github.com/moah0911/aftermath\nnode aftermath/scripts/install.js --project\n```\n\nRestart OpenCode after installing (config loads at startup).\n\n## Removal\n```bash\nnode scripts/install.js --uninstall\n```\n" + }, { "productId": "agent-memory", "type": "plugins", "displayName": "Agent Memory", - "repoUrl": "https://github.com/joshuadavidthomas/opencode-agent-memory", - "tagline": "Letta-inspired memory", - "description": "Gives the agent persistent, self-editable memory blocks inspired by Letta agents.", + "repoUrl": "https://github.com/Ghilteras/opencode-agent-memory", + "tagline": "Persistent, self-editable memory and a local semantic journal", + "description": "Maintained OpenCode plugin providing shared global and project memory blocks, dedicated memory tools, and an opt-in append-only journal with local multilingual semantic search.", + "kind": "plugin", + "topics": [ + "memory" + ], + "compat": "v2", "scope": [ "global" ], @@ -142,11 +508,64 @@ "repoUrl": "https://github.com/joshuadavidthomas/opencode-agent-skills", "tagline": "Dynamic skills loader", "description": "Dynamic skills loader that discovers skills from project, user, and plugin directories.", + "kind": "plugin", + "topics": [ + "prompting" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "aidevops", + "type": "plugins", + "displayName": "AIDevOps", + "repoUrl": "https://github.com/marcusquinn/aidevops", + "tagline": "AI DevOps framework and OpenCode plugin", + "description": "OpenCode-first AI DevOps framework with agents, skills, workflows, safety hooks, memory, GitHub worker dispatch, and integrations for code, infrastructure, content, SEO, and operations.", + "kind": "plugin", + "topics": [ + "orchestration", + "environment" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [], + "homepageUrl": "https://aidevops.sh" + }, + { + "productId": "aion", + "type": "plugins", + "displayName": "AION", + "repoUrl": "https://github.com/ztxtech/aion", + "tagline": "Time-series harness with multi-agent review, skills, tools, and hooks", + "description": "A compiled TypeScript OpenCode plugin that turns OpenCode into a time-series research harness. Bundles six specialized agents (orchestrator, requirements analyst, information collector, coder, and two critic roles), seventeen skills, twenty-plus tools, and eight coordination protocols into one self-contained bundle installed via a one-command CLI. Enforces a four-layer model (task, workspace, execution, review) with hard gates for data-leakage detection, ablation-backed statistical rigor, and dual-critic governance before any output ships.", + "kind": "plugin", + "topics": [ + "orchestration", + "code-quality" + ], + "compat": "v2", + "scope": [ + "project" + ], + "tags": [ + "agents", + "time-series", + "research", + "review", + "governance", + "skills", + "tools", + "multi-agent" + ], + "homepageUrl": "https://github.com/ztxtech/aion", + "minVersion": "0.9.0" + }, { "productId": "antigravity-auth", "type": "plugins", @@ -154,6 +573,11 @@ "repoUrl": "https://github.com/NoeFabris/opencode-antigravity-auth", "tagline": "Google Antigravity models", "description": "Use Gemini and Anthropic models for free via Google Antigravity IDE authentication.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v1", "scope": [ "global" ], @@ -166,6 +590,11 @@ "repoUrl": "https://github.com/theblazehen/opencode-antigravity-multi-auth", "tagline": "Multiple Google accounts", "description": "Fork of opencode-antigravity-auth that allows using multiple Google accounts with automatic rotation when rate limited.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v1", "scope": [ "global" ], @@ -178,6 +607,11 @@ "repoUrl": "https://github.com/pawelma/opencode-autotitle", "tagline": "AI-powered automatic session naming", "description": "Two-phase session titling - instant keyword titles on user message, refined AI titles after response. Auto-selects cheapest model (flash/haiku/fast), respects custom titles, zero configuration needed.", + "kind": "plugin", + "topics": [ + "sessions" + ], + "compat": "v1", "scope": [ "global" ], @@ -190,6 +624,11 @@ "repoUrl": "https://github.com/zenobi-us/opencode-background", "tagline": "Background process management", "description": "Background process management plugin for opencode.", + "kind": "plugin", + "topics": [ + "environment" + ], + "compat": "v1", "scope": [ "global" ], @@ -202,11 +641,40 @@ "repoUrl": "https://github.com/kdcokenny/opencode-background-agents", "tagline": "Async agent delegation", "description": "Claude Code-style background agents with async delegation and context persistence.", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "basemind", + "type": "plugins", + "displayName": "basemind", + "repoUrl": "https://github.com/Goldziher/basemind", + "npmPackage": "basemind-opencode", + "tagline": "Full AI context layer over MCP — code-map, document RAG, agent memory, web crawl, git history", + "description": "Full AI context layer over MCP — tree-sitter code-map, document RAG, shared agent memory, web crawl, and git history. 300+ languages. Published to npm as basemind-opencode (https://www.npmjs.com/package/basemind-opencode).", + "kind": "plugin", + "also": [ + "mcp-server" + ], + "topics": [ + "memory", + "context", + "code-intel" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [], + "installation": "Add to your `opencode.json`:\n\n```json\n{ \"plugin\": [\"basemind-opencode@latest\"] }\n```\n" + }, { "productId": "beads-plugin", "type": "plugins", @@ -214,6 +682,12 @@ "repoUrl": "https://github.com/joshuadavidthomas/opencode-beads", "tagline": "Beads issue tracker integration", "description": "Integration for Steve Yegge's beads issue tracker with /bd-* commands.", + "kind": "plugin", + "topics": [ + "integrations", + "workflow" + ], + "compat": "v1", "scope": [ "global" ], @@ -226,6 +700,29 @@ "repoUrl": "https://github.com/ZanzyTHEbar/brhp", "tagline": "Persistent planning state", "description": "Structured, persistent planning for OpenCode with local session state, /brhp commands, bounded planner history, and a TUI sidebar.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "cache-stats", + "type": "plugins", + "displayName": "cache-stats", + "repoUrl": "https://github.com/nmdra/opencode-cache-stats", + "tagline": "Showing the active session's cache hit rate in a popup dialog", + "description": "This plugin shows the overall cache hit rate, a per-model breakdown, a per subagent breakdown and the associated cost, making it easy to understand cache performance at a glance.", + "kind": "plugin", + "topics": [ + "context", + "observability" + ], + "compat": "v1", "scope": [ "global" ], @@ -235,14 +732,44 @@ "productId": "cc-safety-net", "type": "plugins", "displayName": "CC Safety Net", - "repoUrl": "https://github.com/kenryu42/claude-code-safety-net", + "repoUrl": "https://github.com/kenryu42/cc-safety-net", "tagline": "Safety net catching destructive commands", "description": "A Claude Code plugin that acts as a safety net, catching destructive git and filesystem commands before they execute.", + "kind": "plugin", + "topics": [ + "security" + ], + "compat": "v2", "scope": [ "global" ], "tags": [] }, + { + "productId": "chisle", + "type": "plugins", + "displayName": "Chisle", + "repoUrl": "https://github.com/JayPokale/Chisle", + "tagline": "Cuts token use with terse answers, smallest-code-that-works rules and tool-output compression", + "description": "Installs a ruleset for terse answers that keep every decisive fact and a \"smallest code that works\" ladder, Chisle skills, and a compression plugin that trims oversized tool output before it re-enters the context. The same ruleset ships for Claude Code, Cursor, Codex and Gemini CLI. Install with `npx chisle --only opencode`. MIT, zero dependencies, benchmarks with raw transcripts in the repository.", + "kind": "plugin", + "topics": [ + "context", + "cost", + "prompting" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [ + "tokens", + "cost", + "context", + "productivity" + ], + "homepageUrl": "https://chisle.jaypokale.me" + }, { "productId": "cli-subagent-output", "type": "plugins", @@ -250,11 +777,36 @@ "repoUrl": "https://github.com/raisbecka/opencode-subagent-output", "tagline": "See exactly what your subagents are up to (in the terminal) when invoked during an `opencode run _____` session.", "description": "When opencode run is invoked normally, the actions of the primary agent are visible in the terminal, but subagent actions are not. This makes it difficult to follow progress on the prompt, and makes it very difficult to use `opencode run` as part of an unattended process or script. This plugin pipes subagent actions/events directly to stdout, prefixes them with the subagents name, and enumerates subagents when run in parallel for easy identification. This allows the user to follow along in realtime when subagents are running, and effectively trace execution at a later time.", + "kind": "plugin", + "topics": [ + "orchestration", + "observability" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "codemem", + "type": "plugins", + "displayName": "codemem", + "repoUrl": "https://github.com/kunickiaj/codemem", + "tagline": "Persistent coding memory across sessions, machines, and teammates", + "description": "Captures coding decisions, discoveries, and fixes, with automatic context injection in OpenCode, Claude Code, and Codex. Includes MCP tools for searching and managing memories, a viewer, optional cross-machine sync, and sharing of selected projects with teammates.", + "kind": "plugin", + "topics": [ + "memory", + "sessions" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [], + "homepageUrl": "https://codemem.sh" + }, { "productId": "command-inject", "type": "plugins", @@ -262,6 +814,11 @@ "repoUrl": "https://github.com/shihyuho/opencode-command-inject", "tagline": "Auto-inject project commands into OpenCode", "description": "Automatically discovers and injects Makefile targets, npm/pnpm/yarn/bun scripts, and local skills at startup. Type / to see and run all project commands.", + "kind": "plugin", + "topics": [ + "prompting" + ], + "compat": "v1", "scope": [ "global" ], @@ -274,18 +831,75 @@ "repoUrl": "https://github.com/IgorWarzocha/Opencode-Context-Analysis-Plugin", "tagline": "Token usage analysis", "description": "An opencode plugin that provides detailed token usage analysis for your AI sessions.", + "kind": "plugin", + "topics": [ + "context", + "cost" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "context-optimizer", + "type": "plugins", + "displayName": "Context Optimizer", + "repoUrl": "https://github.com/evermeer/context-optimizer", + "tagline": "Coding Agent Context Optimizer Plugin", + "description": "Keep your coding agent's context small. When a session gets compacted, Context Optimizer reranks the relevant parts, drops duplicates, and compresses the rest with a local ML pipeline (LLMLingua-2 + Sentence Transformers) — so more of the window stays useful and fewer tokens get billed. Everything runs on your machine.", + "kind": "plugin", + "topics": [ + "context" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "contextstream", + "type": "plugins", + "displayName": "ContextStream", + "repoUrl": "https://github.com/contextstream/mcp-server", + "tagline": "Shared project context for OpenCode, Cursor, Claude Code, Codex, and Grok via MCP", + "description": "Hosted MCP server that keeps coding agents on shared project context across sessions and teammates. Works with OpenCode and other MCP-compatible clients. Endpoint https://mcp.contextstream.io/mcp — Intelligence isn’t the bottleneck. Context is.", + "kind": "plugin", + "also": [ + "mcp-server" + ], + "topics": [ + "context", + "memory" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "mcp", + "context", + "productivity", + "collaboration" + ], + "homepageUrl": "https://contextstream.io", + "installation": "## Hosted MCP (recommended)\n\nAdd to your OpenCode MCP config:\n\n```json\n{\n \"mcp\": {\n \"contextstream\": {\n \"url\": \"https://mcp.contextstream.io/mcp\"\n }\n }\n}\n```\n\nSite: https://contextstream.io\nOSS server: https://github.com/contextstream/mcp-server\n" + }, { "productId": "crawlberg", "type": "plugins", "displayName": "Crawlberg", - "repoUrl": "https://github.com/xberg-io/plugins", + "repoUrl": "https://github.com/xberg-io/crawlberg", + "npmPackage": "@xberg-io/opencode-crawlberg", "tagline": "Web crawling and scraping tools for opencode", "description": "OpenCode plugin exposing crawlberg CLI tools for scraping pages, crawling sites, and mapping URLs to JSON or Markdown.", + "kind": "plugin", + "topics": [ + "web" + ], + "compat": "v2", "scope": [ "global", "project" @@ -306,11 +920,102 @@ "repoUrl": "https://github.com/CrewBeeLab/CrewBee", "tagline": "Task-specific Agent Teams for OpenCode", "description": "CrewBee is an independent Agent Team framework for OpenCode. It lets users define reusable task/project-specific Agent Teams, project them into OpenCode agents, and switch between single-agent execution and multi-agent collaboration based on task complexity. It also includes built-in Team templates such as a Coding Team with review flow and completion criteria.", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "daily-journal", + "type": "plugins", + "displayName": "Daily Journal", + "repoUrl": "https://github.com/jianzhangg/opencode-daily-journal", + "tagline": "Auto-journal every conversation into daily/YYYY-MM-DD.md, record-only (never injects)", + "description": "An OpenCode V2 plugin that keeps a daily journal of your conversations. When a session turn finishes, the exchange is summarized into a diary entry and appended to daily/YYYY-MM-DD.md. Record only, never inject: entries are plain Markdown on disk and are never added to session context unless you explicitly ask the agent to read them. Writes are concurrency-safe (file lock + append-only + idempotent markers, so simultaneous sessions never overwrite or duplicate each other), and summaries use a model fallback chain (session model, then other configured models, then a raw excerpt) so nothing is lost when a model is unavailable.", + "kind": "plugin", + "topics": [ + "memory", + "sessions" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "datacloak", + "type": "plugins", + "displayName": "DataCloak", + "repoUrl": "https://github.com/pratikwayal01/datacloak", + "tagline": "Swap secrets and PII for realistic fakes before AI sees them; restore originals on return.", + "description": "Local-first sensitive-data protection for OpenCode. Cloaks API keys, JWTs, PEMs, env vars, DSNs, emails, phones and IPs with Faker-generated synthetics pre-dispatch, blocks env-dump tool calls, redacts tool output, and auto-restores originals into file writes. Zero-config and fully automatic.", + "kind": "plugin", + "topics": [ + "security" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [ + "security", + "privacy", + "secrets", + "redaction" + ], + "minVersion": "1.18.0" + }, + { + "productId": "deja", + "type": "plugins", + "displayName": "deja", + "repoUrl": "https://github.com/vshulcz/deja-vu", + "npmPackage": "opencode-deja", + "tagline": "Recall what you already did in your other coding agents", + "description": "opencode remembers its own sessions. deja answers the other question: what you did in Claude Code, Codex, Cursor, Gemini CLI, Zed and fifteen more agents on this machine — including the months before you installed anything.\n\nA local Go binary indexes the transcripts those agents already wrote to disk, and the plugin gives the model six tools over that index: recall past sessions by error or symbol, read the digest of one session, see which sessions discussed a file before you edit it, ask what this machine actually ran after a given error, and store a decision worth keeping. Recall also arrives unasked — once per session on the system prompt, and a relevance pass per prompt that stays silent when history has no answer.\n\nBM25 over local files. No LLM, no embeddings, no network. Credentials are redacted at index time.", + "kind": "plugin", + "topics": [ + "memory", + "sessions" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "memory", + "recall", + "search", + "cross-agent", + "session-history" + ], + "installation": "```json\n{\n \"$schema\": \"https://opencode.ai/config.json\",\n \"plugin\": [\"opencode-deja\"]\n}\n```\n\nThen index once: `deja index`. The plugin ships the binary, but a deja you installed yourself (`brew install vshulcz/tap/deja-vu`, `go install`, or the install script) always wins.\n" + }, + { + "productId": "dejavu-gates", + "type": "plugins", + "displayName": "dejavu", + "repoUrl": "https://github.com/WhiteBite/dejavu-gates", + "npmPackage": "dejavu-gates", + "tagline": "Cross-session error gates for recurring tool-call failures", + "description": "Mechanically detects recurring tool-call failures (3 failures across 2 distinct sessions promote a gate) and enforces them: reminder on the next attempt, hard block on same-session repeat offense. Diagnostics never block, they annotate. Two-scope store with secret scrubbing and control-char stripping before persistence, 60-day TTL, self-healing reconcile, doctor report. One harness-neutral store shared with Claude Code, Codex CLI, Gemini CLI, Cursor, Copilot CLI, Crush, Devin CLI, Kiro and Cline. TypeScript + Bun, ships as source, no build step.", + "kind": "plugin", + "topics": [ + "code-quality" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [], + "installation": "{ \"plugin\": [\"dejavu-gates\"] } in opencode.json (V1 key \"plugin\", V2 key \"plugins\")\n" + }, { "productId": "devcontainers", "type": "plugins", @@ -318,6 +1023,12 @@ "repoUrl": "https://github.com/athal7/opencode-devcontainers", "tagline": "Multi-branch devcontainers", "description": "Plugin for running multiple devcontainer instances with auto-assigned ports and branch-based isolation.", + "kind": "plugin", + "topics": [ + "environment", + "git" + ], + "compat": "v1", "scope": [ "global" ], @@ -330,6 +1041,29 @@ "repoUrl": "https://github.com/simonwjackson/opencode-direnv", "tagline": "Load direnv variables", "description": "Automatically loads direnv environment variables at session start. Perfect for Nix flakes.", + "kind": "plugin", + "topics": [ + "environment" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "ditto", + "type": "plugins", + "displayName": "Ditto", + "repoUrl": "https://github.com/ohad6k/emulo", + "tagline": "Mines your local AI coding session logs into a personal profile your agent loads before every task", + "description": "Mines local AI coding session logs (OpenCode, Claude Code, Codex, Copilot CLI) into a personal working profile. The OpenCode adapter reads OpenCode's SQLite session store and installs the profile into OpenCode's global rules so the agent loads it before every task. Single stdlib-only Python file, runs locally, MIT licensed.", + "kind": "plugin", + "topics": [ + "memory", + "prompting" + ], + "compat": "unknown", "scope": [ "global" ], @@ -342,6 +1076,11 @@ "repoUrl": "https://github.com/dodopayments/dodo-agent-plugin", "tagline": "Payments, subscriptions, webhooks, and billing for OpenCode agents", "description": "Official Dodo Payments plugin for OpenCode (also Claude Code, Codex, Cursor). Bundles eight integration skills (checkout, subscriptions, webhooks, usage-based billing, credits, license keys, BillingSDK, best practices) plus two MCP servers — a live API server with browser OAuth and a documentation search server. Distributed via npm as @dodopayments/opencode-plugin.", + "kind": "plugin", + "topics": [ + "integrations" + ], + "compat": "v1", "scope": [ "global" ], @@ -354,6 +1093,12 @@ "repoUrl": "https://github.com/Tarquinen/opencode-dynamic-context-pruning", "tagline": "Optimize token usage", "description": "Plugin that optimises token usage by pruning obsolete tool outputs from conversation context.", + "kind": "plugin", + "topics": [ + "context", + "cost" + ], + "compat": "v2", "scope": [ "global" ], @@ -366,6 +1111,15 @@ "repoUrl": "https://github.com/ejentum/ejentum-mcp", "tagline": "MCP server with reasoning, code, anti-deception, and memory tools for AI agents", "description": "MCP server with four tools (harness_reasoning, harness_code, harness_anti_deception, harness_memory) that AI agents can call on demand. Each tool returns a structured prompt the calling agent ingests before generating.", + "kind": "plugin", + "also": [ + "mcp-server" + ], + "topics": [ + "memory", + "code-quality" + ], + "compat": "unknown", "scope": [ "global" ], @@ -379,6 +1133,51 @@ "repoUrl": "https://github.com/boxpositron/envsitter-guard", "tagline": "Prevent .env leaks", "description": "OpenCode plugin that prevents agents/tools from reading or editing sensitive .env* files, while still allowing safe inspection via EnvSitter (keys + deterministic fingerprints; never values).", + "kind": "plugin", + "topics": [ + "security" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "episodic-memory", + "type": "plugins", + "displayName": "Episodic Memory", + "repoUrl": "https://github.com/robertn702/opencode-episodic-memory", + "tagline": "Semantic search over your past conversations — local embeddings, no cloud", + "description": "Indexes your OpenCode session history into a local SQLite store and lets the agent recall past discussions, decisions, and patterns via native episodic_search/episodic_read tools. Fully local and offline — embeddings run in-process via Transformers.js (Snowflake arctic-embed, model chosen by empirical eval), with vector, BM25, and hybrid RRF search modes. Auto-reindexes on session idle; opt-out marker for sensitive chats. Inspired by obra/episodic-memory for Claude Code, rebuilt natively for OpenCode primitives.", + "kind": "plugin", + "topics": [ + "memory", + "sessions" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "memory", + "semantic-search", + "embeddings", + "local-first" + ] + }, + { + "productId": "esuyo-opencode-custom-provider", + "type": "plugins", + "displayName": "Esuyo Custom Provider", + "repoUrl": "https://github.com/8perezm/esuyo-opencode-custom-provider", + "tagline": "Auto-discover models from any OpenAI-compatible gateway on startup", + "description": "Opencode plugin that syncs /v1/models from any OpenAI-compatible gateway into providers. Global ~/.config/opencode or project .opencode config, {env:} / {file:} secrets, include/exclude regex, and zero manual model maintenance.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v2", "scope": [ "global" ], @@ -390,7 +1189,14 @@ "displayName": "FlowDeck", "repoUrl": "https://github.com/DVNghiem/FlowDeck", "tagline": "AI-powered multi-agent workflow orchestration with built-in safety intelligence", - "description": "FlowDeck adds a structured, multi-agent development workflow to OpenCode. It coordinates 25 specialist agents through a four-phase cycle — discuss, plan, execute, review — with persistent state that survives session restarts.\n\nKey features:\n- 25 specialist agents (architect, planner, coder, reviewer, tester, debugger, risk-analyst, policy-enforcer, and more)\n- 24 reusable workflow skills (TDD, security scan, deploy check, code review, and more)\n- 17 workflow commands for all project operations\n- 15 pre-built orchestration flows including Spec-Driven Development (SDD)\n- Persistent state via `.planning/STATE.md` — resume exactly where you left off\n- Wave-based parallel execution for independent tasks\n- AI Safety layer: patch trust scoring, edit gates, phase gating, arch constraint enforcement, failure replay, and regression prediction\n- Deep System Hooks: context monitoring, session idle summaries, shell environment injection\n- Built-in MCPs: Context7 (docs), Exa (web search), Grep.app (code search)\n- Ensemble Reasoning via `/fd-council` for synthesized consensus from multiple agents\n- Persistent Memory with SQLite for tool executions and session summaries\n", + "description": "FlowDeck adds a structured, multi-agent development workflow to OpenCode. It coordinates 25 specialist agents through a four-phase cycle — discuss, plan, execute, review — with persistent state that survives session restarts.\n\nKey features:\n- 25 specialist agents (architect, planner, coder, reviewer, tester, debugger, risk-analyst, policy-enforcer, and more)\n- 24 reusable workflow skills (TDD, security scan, deploy check, code review, and more)\n- 17 workflow commands for all project operations\n- 15 pre-built orchestration flows including Spec-Driven Development (SDD)\n- Persistent state via `.planning/STATE.md` — resume exactly where you left off\n- Wave-based parallel execution for independent tasks\n- AI Safety layer: patch trust scoring, edit gates, phase gating, arch constraint enforcement, failure replay, and regression prediction\n- Deep System Hooks: context monitoring, session idle summaries, shell environment injection\n- Built-in MCPs: Context7 (docs), Exa (web search), Grep.app (code search)\n- Ensemble Reasoning via `/fd-council` for synthesized consensus from multiple agents\n- Persistent Memory with SQLite for tool executions and session summaries", + "kind": "plugin", + "topics": [ + "orchestration", + "workflow", + "security" + ], + "compat": "v1", "scope": [ "global" ], @@ -415,6 +1221,12 @@ "repoUrl": "https://github.com/forloop-cc/forloop-opencode-plugin-planner", "tagline": "Autopilot development. Plan with ForLoop agent. Build, Test, Deploy on cloud in one go.", "description": "ForLoop offers an all-in-one platform that covers the entire development lifecycle, from initial planning and coding to automated testing and cloud deployment.", + "kind": "plugin", + "topics": [ + "workflow", + "code-quality" + ], + "compat": "v1", "scope": [ "global" ], @@ -425,8 +1237,13 @@ "type": "plugins", "displayName": "Froggy", "repoUrl": "https://github.com/smartfrog/opencode-froggy", - "tagline": "Hooks and specialized agents", - "description": "Plugin providing Claude Code-style hooks, specialized agents, and tools like gitingest.", + "tagline": "XP-guided multi-agent orchestration", + "description": "Multi-agent delegation and orchestration guided by XP, KISS, and YAGNI, with specialized agents, independent code review, and a persistent loop to keep work moving toward the objective.", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v2", "scope": [ "global" ], @@ -439,6 +1256,47 @@ "repoUrl": "https://github.com/jenslys/opencode-gemini-auth", "tagline": "Google account auth", "description": "Authenticate the Opencode CLI with your Google account so you can use your existing Gemini plan.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "godmode", + "type": "plugins", + "displayName": "Godmode", + "repoUrl": "https://github.com/arbazkhan971/godmode", + "tagline": "Discipline layer: measure → modify → verify → keep/revert", + "description": "Skill plugin with 135 skills and 7 subagents that adds a measure → modify → verify → keep/revert discipline loop to AI coding agents. Works with OpenCode alongside Claude Code, Codex, Cursor, and Gemini CLI.", + "kind": "plugin", + "topics": [ + "workflow", + "code-quality" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "godmode-aiimagined", + "type": "plugins", + "displayName": "Godmode", + "repoUrl": "https://github.com/AIimagined/Godmode", + "tagline": "A local, tamper-evident record of what a coding agent did, what it claimed, and what was verified.", + "description": "Godmode keeps a hash-chained local record of what a coding agent did, what it claimed, and what was verified, and refuses \"done\" without a citation. On OpenCode it runs as an AGENTS.md instruction adapter plus an optional Bun plugin shim (adapters/opencode/godmode.opencode.js) that routes every bash, write, edit and patch call through the same pre-tool gate the other hosts use and throws before a refused tool runs. Zero runtime dependencies, zero network use, nothing leaves the machine.", + "kind": "plugin", + "topics": [ + "observability", + "code-quality" + ], + "compat": "v1", "scope": [ "global" ], @@ -451,6 +1309,11 @@ "repoUrl": "https://github.com/IgorWarzocha/Opencode-Google-AI-Search-Plugin", "tagline": "Query Google AI Mode (SGE)", "description": "An opencode plugin that exposes a native tool for querying Google AI Mode (SGE).", + "kind": "plugin", + "topics": [ + "web" + ], + "compat": "v1", "scope": [ "global" ], @@ -463,6 +1326,11 @@ "repoUrl": "https://github.com/joshuadavidthomas/opencode-handoff", "tagline": "Session handoff prompts", "description": "Creates focused handoff prompts for continuing work in a new session.", + "kind": "plugin", + "topics": [ + "sessions" + ], + "compat": "v1", "scope": [ "global" ], @@ -475,6 +1343,12 @@ "repoUrl": "https://github.com/smc2315/harness-memory", "tagline": "Persistent project memory - 73 percent fewer tokens than CLAUDE.md, with human review", "description": "Auto-captures evidence from tool interactions and materializes memories through a multi-gate pipeline. 4-layer activation engine selects the right memories per context. Replaces CLAUDE.md with structured, searchable, reviewable project memory. Local-first (sql.js WASM), zero cloud dependency.", + "kind": "plugin", + "topics": [ + "memory", + "context" + ], + "compat": "v1", "scope": [ "global" ], @@ -487,11 +1361,40 @@ "repoUrl": "https://github.com/HiAi-gg/hiai-opencode", "tagline": "Canonical 12-agent model with bundled skills, MCP, LSP, and ralph-loop", "description": "Unified plugin shipping 10 visible agents (Bob, Coder, Strategist, Critic, Guard, Researcher, Designer, Manager, Brainstormer, Vision) plus hidden Sub and Agent Skills. Bundles MCP wiring (playwright, stitch, sequential-thinking, firecrawl, rag, mempalace, context7, websearch, grep_app), LSP, skill materialization, and a multi-layer continuation system (todo enforcer, ralph-loop, ULTRAWORK auto-start) in one install.", + "kind": "plugin", + "topics": [ + "orchestration", + "workflow" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "homie", + "type": "plugins", + "displayName": "homie", + "repoUrl": "https://github.com/prashanthgit19/homie", + "tagline": "Four-level chat-voice personality layer — same code, different voice (off / yo / dawg / mafa)", + "description": "A prompt-injection personality layer that changes how the agent talks in prose while leaving technical answers, code, and commands identical. Ships yo, dawg, and mafa registers plus an off switch, set with /homie. Same package also runs on Claude Code, Codex, and Pi.", + "kind": "plugin", + "topics": [ + "prompting" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "personality", + "voice", + "prompt", + "hooks", + "fun" + ] + }, { "productId": "honcho", "type": "plugins", @@ -499,6 +1402,11 @@ "repoUrl": "https://github.com/plastic-labs/opencode-honcho", "tagline": "AI-native long-term memory for OpenCode", "description": "Give OpenCode persistent memory that survives context wipes, session restarts, and fresh chats. Honcho remembers what you're working on, durable preferences, and prior context across projects. Supports cloud and self-hosted deployments with configurable session strategies.", + "kind": "plugin", + "topics": [ + "memory" + ], + "compat": "v2", "scope": [ "global" ], @@ -508,9 +1416,15 @@ "productId": "html-to-markdown", "type": "plugins", "displayName": "HTML to Markdown", - "repoUrl": "https://github.com/xberg-io/plugins", + "repoUrl": "https://github.com/xberg-io/html-to-markdown", + "npmPackage": "@xberg-io/opencode-html-to-markdown", "tagline": "Fast, lossless HTML to Markdown conversion", "description": "OpenCode plugin exposing html-to-markdown CLI tools for converting HTML to clean Markdown with metadata, tables, and document structure.", + "kind": "plugin", + "topics": [ + "web" + ], + "compat": "v2", "scope": [ "global", "project" @@ -524,13 +1438,106 @@ "homepageUrl": "https://www.npmjs.com/package/@xberg-io/opencode-html-to-markdown", "installation": "Add the package to `opencode.json`:\n\n```json\n{\n \"plugin\": [\"@xberg-io/opencode-html-to-markdown\"]\n}\n```\n\nRequires the `html-to-markdown` CLI.\n" }, + { + "productId": "image-reader-relay", + "type": "plugins", + "displayName": "Image Reader Relay", + "repoUrl": "https://github.com/massiveits/image-reader-relay", + "tagline": "Let text-only models read pasted images via a vision model (OpenCode plugin)", + "description": "OpenCode plugin that lets text-only models read images pasted into a session.\nStashes pasted images in memory, injects a note into the model's context only,\nand registers a `read_image` tool the main model calls with its own question —\nrelaying the image to a configurable vision model in a throwaway session, then\ncleaning up. Models that support images natively are left untouched.", + "kind": "plugin", + "topics": [ + "media" + ], + "compat": "v1", + "scope": [ + "global", + "project" + ], + "tags": [ + "images", + "vision", + "multimodal", + "productivity" + ], + "installation": "## Prerequisites\n- OpenCode with a tool-capable main model\n- Access to a vision model via one of your providers\n\n## Installation\nAdd to `opencode.json` (project) or `~/.config/opencode/opencode.json` (global):\n```json\n{\n \"plugin\": [\n [\"massiveits/image-reader-relay\", { \"model\": \"clinepass/cline-pass/mimo-v2.5\" }]\n ]\n}\n```\n" + }, + { + "productId": "internet-court", + "type": "plugins", + "displayName": "Internet Court", + "repoUrl": "https://github.com/internet-court/internet-court-skill", + "tagline": "Trust layer for agent-to-agent commerce: mandates, payments, escrow, dispute resolution.", + "description": "The trust layer for agent-to-agent commerce — natural-language mandates, delegated permissions, x402 payments, escrow, and dispute resolution as one open, catch-all skill. By the Internet Court Consortium (internetcourt.org). MIT licensed.", + "kind": "plugin", + "topics": [ + "integrations" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "agent-payments", + "x402", + "erc-7710", + "erc-8004", + "escrow", + "genlayer", + "dispute-resolution", + "a2a", + "agentic-commerce" + ], + "homepageUrl": "https://internetcourt.org" + }, + { + "productId": "jes", + "type": "plugins", + "displayName": "jes", + "repoUrl": "https://github.com/everafterlabs/jes", + "tagline": "Prompt-injection and jailbreak guardrails for AI agents, powered by decision models like Jev.", + "description": "OpenCode plugin from the open-source jes library. It checks the user prompt, each tool call before it runs and each tool result, sending every check to a decision model such as Jev, which outputs a classification, not text. Secrets and PII are redacted locally before any model sees them. The Jev checks call a hosted API and need a TYPESAFE_API_KEY.", + "kind": "plugin", + "topics": [ + "security" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "keep-going", + "type": "plugins", + "displayName": "keep-going", + "repoUrl": "https://github.com/ferdousbhai/keep-going", + "tagline": "Sends an idle session back to work when a reviewer model judges the request unfinished", + "description": "When a session goes idle, a reviewer model reads the owner's request and the last assistant message and answers CONTINUE or STOP; on CONTINUE the plugin sends a short fixed nudge such as \"Keep going.\" as the next message. It stops for work that is done, blocked, or waiting on the owner's consent or answer, caps continuations per turn, and fails open on any error. Install with `npx github:ferdousbhai/keep-going --opencode`.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, { "productId": "kibi-opencode", "type": "plugins", "displayName": "kibi-opencode", "repoUrl": "https://github.com/Looted/kibi", - "tagline": "Repo-local, branch-scoped knowledge and traceability for OpenCode", - "description": "Plugin-first entry point into the Kibi stack for OpenCode users. It adds context-aware\nguidance, routes durable code comments toward Kibi artifacts, runs non-blocking background\nsync and targeted validation checks, and helps keep repo knowledge branch-local and queryable.\n", + "npmPackage": "kibi-opencode", + "tagline": "OpenCode guidance for keeping requirements linked to code and tests", + "description": "Kibi connects project requirements to code and tests. This optional OpenCode plugin gives agents relevant guidance and runs background sync and checks.", + "kind": "plugin", + "topics": [ + "code-quality", + "workflow" + ], + "compat": "v1", "scope": [ "project" ], @@ -540,7 +1547,7 @@ "mcp", "traceability" ], - "installation": "## Install\nAdd the plugin to your project `opencode.json`:\n\n```json\n{\n \"$schema\": \"https://opencode.ai/config.json\",\n \"plugin\": [\"kibi-opencode\"]\n}\n```\n\nOpenCode installs npm plugins declared in `plugin` automatically at startup.\n\nAfter startup, run `/init-kibi` in the repository to bootstrap the Kibi knowledge base.\n" + "installation": "## Install\nInstall Kibi's core tools in your project, then initialize it:\n\n```sh\nnpm install --save-dev kibi-core kibi-cli kibi-mcp\nnpm exec -- kibi init\n```\n\nAdd the MCP server and optional plugin to your project `opencode.json`:\n\n```json\n{\n \"$schema\": \"https://opencode.ai/config.json\",\n \"mcp\": {\n \"kibi\": {\n \"type\": \"local\",\n \"enabled\": true,\n \"command\": [\"npx\", \"--no-install\", \"kibi-mcp\"]\n }\n },\n \"plugin\": [\"kibi-opencode\"]\n}\n```\n\nAfter startup, run `/kibi-bootstrap` to plan and review the knowledge base for an existing project.\n" }, { "productId": "kilo-auth", @@ -549,18 +1556,71 @@ "repoUrl": "https://github.com/JungHoonGhae/opencode-kilo-auth", "tagline": "Kilo Gateway provider", "description": "Adds Kilo Gateway provider support to OpenCode.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "laya-drift", + "type": "plugins", + "displayName": "Laya Drift", + "repoUrl": "https://github.com/pythongiant/laya-drift", + "tagline": "Semantic drift monitoring for long-running OpenCode agent sessions.", + "description": "Laya Drift monitors whether an OpenCode agent is staying aligned with its original plan over long-running sessions. It uses the Laya decision model to embed session state, compares the current semantic state against a calibrated baseline with Jensen-Shannon divergence, and surfaces a live drift score in the OpenCode UI. When drift gets high, it can inject the score into the system prompt so the agent can self-correct. Sessions can also be recalibrated to establish a new baseline after an intentional change in direction.", + "kind": "plugin", + "topics": [ + "sessions", + "observability" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "lazy-clean", + "type": "plugins", + "displayName": "lazy-clean", + "repoUrl": "https://github.com/JustasMonkev/lazy-clean", + "tagline": "Minimal-code guidance, review commands, and a dependency-free TS/JS slop checker", + "description": "Injects configurable minimal-code guidance into OpenCode each turn and adds slash commands for code review, audits, and test review. Includes a local, dependency-free TypeScript/JavaScript heuristic checker, run manually in OpenCode. Install from the full checkout to keep the shared hooks and skills directories alongside the plugin.", + "kind": "plugin", + "topics": [ + "code-quality", + "ui" + ], + "compat": "v1", + "scope": [ + "project" + ], + "tags": [ + "code-review", + "code-quality", + "skills" + ] + }, { "productId": "lemma", "type": "plugins", "displayName": "Lemma", "repoUrl": "https://github.com/xenitV1/lemma", "tagline": "Persistent memory layer for LLMs via MCP - local, zero-dependency, works on all clients", - "description": "Biological memory model for AI coding agents. Features confidence decay/boost, Fuse.js fuzzy dedup, guide system with usage tracking, cross-references, cumulative backup, virtual session tracking, and universal memory injection via tool descriptions (works on Claude Desktop, Cursor, VS Code, Gemini CLI, opencode, and any MCP client). No API keys, no cloud, fully local JSONL storage. 20 MCP tools, 110 tests, MIT licensed.\n", + "description": "Biological memory model for AI coding agents. Features confidence decay/boost, Fuse.js fuzzy dedup, guide system with usage tracking, cross-references, cumulative backup, virtual session tracking, and universal memory injection via tool descriptions (works on Claude Desktop, Cursor, VS Code, Gemini CLI, opencode, and any MCP client). No API keys, no cloud, fully local JSONL storage. 20 MCP tools, 110 tests, MIT licensed.", + "kind": "plugin", + "also": [ + "mcp-server" + ], + "topics": [ + "memory" + ], + "compat": "unknown", "scope": [ "global" ], @@ -577,9 +1637,15 @@ "productId": "liter-llm", "type": "plugins", "displayName": "liter-llm", - "repoUrl": "https://github.com/xberg-io/plugins", + "repoUrl": "https://github.com/xberg-io/liter-llm", + "npmPackage": "@xberg-io/opencode-liter-llm", "tagline": "Universal LLM API client for 143 providers", "description": "OpenCode plugin exposing liter-llm tools for chat, streaming, embeddings, and an OpenAI-compatible proxy across 143 providers.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v2", "scope": [ "global", "project" @@ -593,13 +1659,103 @@ "homepageUrl": "https://www.npmjs.com/package/@xberg-io/opencode-liter-llm", "installation": "Add the package to `opencode.json`:\n\n```json\n{\n \"plugin\": [\"@xberg-io/opencode-liter-llm\"]\n}\n```\n\nRequires the `liter-llm` CLI.\n" }, + { + "productId": "littlepowers", + "type": "plugins", + "displayName": "Littlepowers", + "repoUrl": "https://github.com/clsaa/littlepowers", + "tagline": "Proportional planning, recovery, and phase review gates for consequential work", + "description": "A proportional planning, recovery, and engineering-discipline protocol. Scales planning depth to risk (direct, compact shape, or full brainstorm → spec → design → plan), pauses for review at each phase gate, recovers the last checkpoint after interruptions, and mirrors task checklists to OpenCode's native todo surface. Registers its skills directory through the config hook and injects read-only recovery context through the message-transform hook; the same implementation also ships for Codex, Claude Code, and Qoder.", + "kind": "plugin", + "topics": [ + "workflow", + "code-quality" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "llm-proxy", + "type": "plugins", + "displayName": "opencode-llm-proxy", + "repoUrl": "https://github.com/KochC/opencode-llm-proxy", + "npmPackage": "opencode-llm-proxy", + "tagline": "OpenCode-backed API gateway with tool calling", + "description": "Local OpenCode plugin that exposes OpenAI Chat Completions, OpenAI Responses, Anthropic Messages, and Gemini-compatible endpoints for any model configured in OpenCode. Supports streaming, model listing, and real tool/function calling including parallel tool calls, so tools like n8n, Open WebUI, LangChain, Continue, Zed, and coding agents can reuse the same OpenCode model setup.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v1", + "scope": [ + "global", + "project" + ], + "tags": [ + "openai", + "anthropic", + "gemini", + "responses-api", + "llm-gateway", + "tool-calling", + "n8n", + "open-webui", + "langchain" + ], + "homepageUrl": "https://www.npmjs.com/package/opencode-llm-proxy", + "installation": "Add the package to `opencode.json`:\n\n```json\n{\n \"plugin\": [\"opencode-llm-proxy\"]\n}\n```\n\nThe proxy starts automatically on `http://127.0.0.1:4010`.\n" + }, + { + "productId": "lmstudio-warm", + "type": "plugins", + "displayName": "LM Studio Warm", + "repoUrl": "https://github.com/diegomarino/lm-studio-warm", + "tagline": "Ensures your LM Studio model is loaded before every request", + "description": "Guarantees the target LM Studio model is loaded and addressable before any request leaves opencode, healing cold starts, \"no model loaded\" errors, and mid-session idle-TTL evictions.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "lore", + "type": "plugins", + "displayName": "Lore", + "repoUrl": "https://github.com/FFatTiger/lore", + "tagline": "Long-term memory for OpenCode with boot baseline and per-prompt recall", + "description": "Native plugin that connects OpenCode to a Lore memory server. A fixed boot baseline loads identity, workflow and preference memories into the system context at session start, recall surfaces relevant memories before each prompt, and durable facts are written back through guarded lore_* tools to a URI-addressed memory graph shared with Claude Code, Codex and other runtimes. Self-hosted with Docker or use the managed Loremem service.", + "kind": "plugin", + "topics": [ + "memory", + "prompting" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [], + "homepageUrl": "https://loremem.com/documents/agents/opencode" + }, { "productId": "magic-context", "type": "plugins", "displayName": "Magic Context", - "repoUrl": "https://github.com/cortexkit/opencode-magic-context", + "repoUrl": "https://github.com/cortexkit/magic-context", "tagline": "Lossless context management with background compression", "description": "Cache-aware context management that keeps long sessions productive. Background historian compresses old conversation into structured compartments while you keep working. Includes cross-session project memory, unified search across history/memories/facts, overnight dreamer for memory maintenance, and prompt-cache-safe deferred operations.", + "kind": "plugin", + "topics": [ + "context" + ], + "compat": "v2", "scope": [ "global" ], @@ -612,6 +1768,47 @@ "repoUrl": "https://github.com/Randroids-Dojo/ManageSkills", "tagline": "Wizard-driven skills management for OpenCode.", "description": "Modal-based skill install, remove, list, and update workflow that avoids ANSI prompts while wrapping the skills CLI inside OpenCode.", + "kind": "plugin", + "topics": [ + "prompting", + "workflow" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "marginal", + "type": "plugins", + "displayName": "MARGINAL", + "repoUrl": "https://github.com/SignalLayerLabs/Marginal", + "tagline": "Runtime governance for OpenCode that detects no-progress repetition and records local evidence.", + "description": "MARGINAL is a local-first runtime governor for AI coding agents with an OpenCode observe-only integration. It observes tool activity, detects proven no-progress repetition, and records decision evidence without blocking OpenCode actions.", + "kind": "plugin", + "topics": [ + "observability" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "mem0", + "type": "plugins", + "displayName": "Mem0 OpenCode Plugin", + "repoUrl": "https://github.com/mem0ai/mem0", + "tagline": "Persistent memory plugin so your agent remembers across sessions", + "description": "OpenCode plugin that gives your agent persistent memory powered by Mem0. Includes 9 MCP memory tools, 16 slash commands, and lifecycle hooks that auto-capture decisions, search prior context at session start, and pre-fetch error memories on failures. Install with `opencode plugin @mem0/opencode-plugin`.", + "kind": "plugin", + "topics": [ + "memory", + "sessions" + ], + "compat": "v1", "scope": [ "global" ], @@ -624,6 +1821,11 @@ "repoUrl": "https://github.com/vtemian/micode", "tagline": "Brainstorm-Plan-Implement workflow", "description": "Structured workflow with session continuity, subagent orchestration, git worktree isolation, and AST-aware tools.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v1", "scope": [ "global" ], @@ -636,6 +1838,28 @@ "repoUrl": "https://github.com/ramarivera/opencode-model-announcer", "tagline": "Model self-awareness", "description": "Automatically injects the current model name into the chat context so the LLM is self-aware.", + "kind": "plugin", + "topics": [ + "prompting" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "modellix", + "type": "plugins", + "displayName": "Modellix", + "repoUrl": "https://github.com/Modellix/modellix-plugin", + "tagline": "Unified API for AI image and video generation", + "description": "OpenCode-compatible plugin/skill for async image and video generation via Modellix CLI (model run --wait, task download) with default T2I/T2V/I2I/I2V/V2V/TTS/STT/STS models.", + "kind": "plugin", + "topics": [ + "media" + ], + "compat": "v2", "scope": [ "global" ], @@ -648,6 +1872,75 @@ "repoUrl": "https://github.com/JRedeker/opencode-morph-fast-apply", "tagline": "10,500+ tokens/sec code editing", "description": "Integrates Morph's Fast Apply API for faster code editing with lazy edit markers and unified diff output.", + "kind": "plugin", + "topics": [ + "code-intel" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "mrscraper", + "type": "plugins", + "displayName": "MrScraper", + "repoUrl": "https://github.com/mrscraper-com/mrscraper-opencode-plugin", + "npmPackage": "@mrscraper/opencode", + "tagline": "Web pages as HTML, Markdown, or screenshots, plus Google search, through the hosted MrScraper MCP server", + "description": "OpenCode plugin that registers the hosted MrScraper MCP server (https://mcp.mrscraper.com/mcp, OAuth 2.1) and three on-demand skills. Its tools retrieve known pages as HTML, Markdown, or screenshots (scraperAPI), search Google (webSearch), and report account usage (status). The skills follow a retrieve-first workflow that preserves raw page content and derives structured output locally. Works in OpenCode 2 and OpenCode 1. A MrScraper account is required.", + "kind": "plugin", + "also": [ + "mcp-server" + ], + "topics": [ + "web" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "mcp", + "web-scraping", + "screenshots", + "google-search", + "serp" + ], + "homepageUrl": "https://docs.mrscraper.com/docs/getting-started/mcp-server", + "installation": "```bash\n# OpenCode 2\nopencode plugin add @mrscraper/opencode\n# OpenCode 1\nopencode plugin @mrscraper/opencode --global\n\nopencode mcp auth mrscraper\n```\n\n`opencode mcp list` shows `mrscraper` as connected after sign-in.\n" + }, + { + "productId": "muse-auth", + "type": "plugins", + "displayName": "Muse Auth", + "repoUrl": "https://github.com/TheStreamCode/opencode-muse-auth", + "tagline": "Muse Spark billed to subscription", + "description": "Use Muse Spark in opencode billed to the Muse Code monthly subscription via Meta device login instead of API billing.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "neuralyzer", + "type": "plugins", + "displayName": "Neuralyzer", + "repoUrl": "https://github.com/gintasz/neuralyzer", + "tagline": "Easier Ralph loop inside harness", + "description": "Allow agent to wipe its own session context and re-run the first message. This allows easier and more ergonomic Ralph loop engineering.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v1", "scope": [ "global" ], @@ -660,18 +1953,94 @@ "repoUrl": "https://github.com/one-bit/oc-mnemoria", "tagline": "Persistent shared memory (hive mind) for OpenCode agents across sessions", "description": "Gives all OpenCode agents a shared persistent memory store where every agent can read and write. Each entry is tagged with the creating agent (plan, build, ask, review) so no context is lost between roles. Powered by the mnemoria Rust engine with hybrid BM25 + semantic search, CRC32 checksum chains, and an append-only binary format. Includes 7 tools and /mn-* slash commands.", + "kind": "plugin", + "topics": [ + "memory", + "sessions" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, { - "productId": "oh-my-opencode", + "productId": "oh-my-agentmemory", "type": "plugins", - "displayName": "Oh My Opencode", - "repoUrl": "https://github.com/code-yeongyu/oh-my-opencode", + "displayName": "oh-my-agentmemory", + "repoUrl": "https://github.com/dev-hann/oh-my-agentmemory", + "tagline": "Forces agents to actually write to agentmemory, not just read from it", + "description": "Companion plugin to agentmemory-capture. Re-injects a memory policy directive into the system prompt every turn so the agent actually calls memory_save, bootstraps empty pinned slots on session start, catches bilingual intent keywords (EN/KR), auto-saves lessons from error-signal file edits, and suggests crystallizing finished work. Installs from npm with one line in opencode.json.", + "kind": "plugin", + "topics": [ + "memory" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "memory", + "agentmemory", + "persistence" + ], + "installation": "Add `\"oh-my-agentmemory\"` to the `plugin` array in `opencode.json` and restart opencode.", + "minVersion": "1.14.0" + }, + { + "productId": "oh-my-cassette", + "type": "plugins", + "displayName": "Oh My Cassette", + "repoUrl": "https://github.com/Cassette-Editor/oh-my-cassette", + "tagline": "Chat your raw clips into a finished cut", + "description": "Adds a local stdio MCP server that turns a chat message into an edited video: beat-synced cuts, auto-matched background music, subtitles, transitions, and picture-in-picture. Ingest local clips, then drive a persistent multi-turn editing thread — every turn returns a timeline delta and a contact-sheet preview, so an edit can be reviewed before anything renders. Editing and rendering run on the hosted Cassette service, which requires an account; the plugin, skills, and MCP server are MIT licensed.", + "kind": "plugin", + "topics": [ + "media" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "mcp", + "video", + "video-editing", + "media" + ], + "homepageUrl": "https://trycassette.online", + "installation": "```bash\ncurl -fsSL https://raw.githubusercontent.com/Cassette-Editor/oh-my-cassette/release/scripts/install_opencode.py | python3 -\n```\n\nWrites the `cassette` MCP server into `~/.config/opencode/opencode.json`, installs the\nhost-neutral skills into `~/.config/opencode/skills/`, and adds `/cassette-model` to\n`~/.config/opencode/commands/`. Re-run the same command to update. Requires Python\n3.11–3.13 on the machine and a Cassette account.\n" + }, + { + "productId": "oh-my-kiro", + "type": "plugins", + "displayName": "Oh My Kiro", + "repoUrl": "https://github.com/1nhann/oh-my-kiro", + "tagline": "AWS Kiro-inspired multi-agent SDD coding agent harness", + "description": "A spec-driven, multi-agent coding plugin for OpenCode inspired by AWS Kiro. Features requirements-first workflow, spec task execution, context gathering, background tasks, and multimodal support.", + "kind": "plugin", + "topics": [ + "orchestration", + "workflow" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "oh-my-openagent", + "type": "plugins", + "displayName": "Oh My OpenAgent", + "repoUrl": "https://github.com/code-yeongyu/oh-my-openagent", "tagline": "Agents & Pre-built tools", - "description": "Background agents, pre-built tools (LSP/AST/MCP), curated agents, and a Claude Code compatible layer.", + "description": "Background agents, pre-built tools (LSP/AST/MCP), curated agents, and a Claude Code compatible layer. (formerly Oh My Opencode)", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v1", "scope": [ "global" ], @@ -684,6 +2053,12 @@ "repoUrl": "https://github.com/alvinunreal/oh-my-opencode-slim", "tagline": "Lightweight agent orchestration with reduced token usage", "description": "Slimmed-down fork of oh-my-opencode focused on core agent orchestration. Features specialized sub-agents (Explorer, Oracle, Librarian, Designer, etc.), background task management, LSP/AST tools, tmux integration for live agent visibility, and MCP servers. Optimized to consume significantly fewer tokens.", + "kind": "plugin", + "topics": [ + "orchestration", + "context" + ], + "compat": "v2", "scope": [ "global" ], @@ -703,6 +2078,11 @@ "repoUrl": "https://github.com/Alph4d0g/opencode-omniroute-auth", "tagline": "Omniroute authentication provider", "description": "Connect and automatically fetch models from your Omniroute instance", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v1", "scope": [ "global" ], @@ -715,6 +2095,11 @@ "repoUrl": "https://github.com/martinzokov/open-conclave", "tagline": "Multi-agent debates, moderated by a captain agent until they reach consensus", "description": "In the style of Grok 4.20, multiple agents are dispatched to answer the same query. Each one has a different system prompt (logical, creative, research-focused) and have to reach a consensus for the final output. The user can specify which provider/model they want to use and override the system prompt of each agent via config.", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v1", "scope": [ "global" ], @@ -727,6 +2112,13 @@ "repoUrl": "https://github.com/Suraj1235/open-dynamic-workflows", "tagline": "Dynamic multi-agent workflows for OpenCode — plan, orchestrate, and verify with the script as the orchestrator", "description": "An MIT-licensed engine bringing Claude-Code-style dynamic workflows and ultracode to OpenCode. A local daemon runs a generated orchestration script with concurrent agents, adversarial verification, and crash-resume; the OpenCode plugin adds workflow/ultracode triggers and a planning UI. Bring your own model — Anthropic, any OpenAI-compatible endpoint, or local Ollama.", + "kind": "plugin", + "topics": [ + "orchestration", + "workflow", + "code-quality" + ], + "compat": "v1", "scope": [ "global" ], @@ -739,6 +2131,12 @@ "repoUrl": "https://github.com/ndom91/open-plan-annotator", "tagline": "Annotate LLM plans like a Google Doc!", "description": "A fully local agentic coding plugin that intercepts plan mode and opens an annotation UI in your browser. Select text to strikethrough, replace, insert, or comment — then approve the plan or request changes", + "kind": "plugin", + "topics": [ + "workflow", + "ui" + ], + "compat": "v2", "scope": [ "global" ], @@ -751,6 +2149,11 @@ "repoUrl": "https://github.com/numman-ali/opencode-openai-codex-auth", "tagline": "ChatGPT Plus/Pro OAuth", "description": "This plugin enables opencode to use OpenAI's Codex backend via ChatGPT Plus/Pro OAuth authentication.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v1", "scope": [ "global" ], @@ -763,6 +2166,11 @@ "repoUrl": "https://github.com/ian-pascoe/opencode-adaptive-thinking", "tagline": "Adaptive reasoning-effort control", "description": "OpenCode plugin that lets agents actively adjust model reasoning effort during a session, with configurable system guidance and a tool for switching between valid reasoning-effort variants.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v1", "scope": [ "global" ], @@ -775,6 +2183,28 @@ "repoUrl": "https://github.com/gotgenes/opencode-agent-identity", "tagline": "Agent self-identity and per-message attribution for multi-agent sessions", "description": "Two plugins that improve agent identity awareness. AgentSelfIdentityPlugin injects a one-liner into the system prompt so the model knows which agent it's operating as. AgentAttributionToolPlugin exposes a tool for querying per-message agent attribution via the SDK, useful for agents that review multi-agent sessions.", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-agent-loop", + "type": "plugins", + "displayName": "Agent Loop", + "repoUrl": "https://github.com/dwrdx/opencode-agent-loop", + "tagline": "Goal-oriented agent loop that nudges agents toward objectives", + "description": "Iteratively drives agents toward configurable objectives with turn/time budgets, marker/regex-based termination conditions, idle detection, and a /loop slash command for manual control.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v2", "scope": [ "global" ], @@ -784,9 +2214,15 @@ "productId": "opencode-agent-tmux", "type": "plugins", "displayName": "OpenCode Agent Tmux", - "repoUrl": "https://github.com/AnganSamadder/opencode-agent-tmux", + "repoUrl": "https://github.com/AnganSamadder/opentmux", "tagline": "Real-time tmux panes for OpenCode agents with auto-launch, streaming, and cleanup.", "description": "Smart tmux integration for OpenCode that auto-spawns panes to stream agent output, supports flexible layouts and multi-port setups, and cleans up when sessions finish.", + "kind": "plugin", + "topics": [ + "environment", + "orchestration" + ], + "compat": "unknown", "scope": [ "global" ], @@ -799,6 +2235,11 @@ "repoUrl": "https://github.com/Mark1708/opencode-agents-sidebar", "tagline": "Browse configured OhMyOpenAgent agents in the TUI", "description": "OpenCode sidebar plugin that displays configured OhMyOpenAgent agents with lifecycle-based categories, collapsible sections, descriptions, and model information.", + "kind": "plugin", + "topics": [ + "ui" + ], + "compat": "v1", "scope": [ "global" ], @@ -811,6 +2252,11 @@ "repoUrl": "https://github.com/bluelovers/opencode-arise", "tagline": "「⚔️ ARISE!」 A Solo Leveling themed orchestrator harness for OpenCode", "description": "A lightweight, token-efficient orchestrator layer. Enables parallel background task execution in OpenCode. Launch AI agents to work simultaneously on exploration and research while continuing with other tasks. Allows specifying custom models for each_agent via configuration.", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v1", "scope": [ "global" ], @@ -823,6 +2269,116 @@ "repoUrl": "https://github.com/d3vv3/opencode-ascii", "tagline": "Strip unicode characters from output and replace them by their ASCII equivalents", "description": "Substitute unicode characters for ASCII. Em-dash (—) and en-dash (–) for hyphens (-); right arrow (→) for (->) and so on.", + "kind": "plugin", + "topics": [ + "ui" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-ask", + "type": "plugins", + "displayName": "opencode-ask", + "repoUrl": "https://github.com/dhkimxx/opencode-ask", + "tagline": "Multi-turn /btw-style side chat that never adds to your session", + "description": "Ask follow-up side questions about the current session in a full-screen view. Switch to the main conversation and back with shift+arrows, and close the side chat to forget it. Built for OpenCode 2.", + "kind": "plugin", + "topics": [ + "sessions" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [], + "minVersion": "2.0.27" + }, + { + "productId": "opencode-autocompact", + "type": "plugins", + "displayName": "OpenCode Autocompact", + "repoUrl": "https://github.com/N0K0/opencode-autocompact", + "npmPackage": "@hacky.software/opencode-autocompact", + "tagline": "Per-session autocompact — /autocompact 500k compacts a session and its children early", + "description": "Claude Code's autocompact, with a knob. Compacts a session before the model's real context limit, at a token count you choose per session. OpenCode's built-in auto-compaction is configured globally and only relative to the model limit, so on a 256K or 1M context model it kicks in very late; this adds an earlier, deliberate ceiling for one session and its children, useful for cheaper requests, more headroom for large tool results, or a shorter tail for the summarizer. Thresholds are inherited by subagents by walking the parentID chain, `/autocompact off` reverts to normal behaviour, and with no threshold set the plugin has zero footprint. When a threshold applies, a chip joins the prompt footer and a side panel shows the numbers. Tested against 2.0.24.", + "kind": "plugin", + "topics": [ + "context" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "context", + "compaction", + "tokens", + "tui" + ], + "installation": "## Install\n\n```sh\nopencode plugin add @hacky.software/opencode-autocompact\n```\n\nOr list it in `opencode.json`:\n\n```json\n{\n \"$schema\": \"https://opencode.ai/config.json\",\n \"plugins\": [\"@hacky.software/opencode-autocompact\"]\n}\n```\n\n## Usage\n\n```\n/autocompact 500k # compact this session (and its children) at 500k tokens\n/autocompact 500000 # same, plain count\n/autocompact 1m # suffix form\n/autocompact # report the effective threshold and the model's limit\n/autocompact off # revert this session (and descendants) to normal auto-compaction\n```\n\nNo configuration is required. The plugin does nothing until a threshold is set for a\nsession or one of its ancestors.\n", + "minVersion": "2.0.0" + }, + { + "productId": "opencode-autorecord", + "type": "plugins", + "displayName": "AutoRecord", + "repoUrl": "https://github.com/kevinsoul/opencode-autorecord", + "tagline": "Automatic session recording", + "description": "Automatically saves all OpenCode session records to Markdown files with centralized storage in ~/opencode-autorecord, plus generated HTML views (overview index + per-project pages) for browsing conversations.", + "kind": "plugin", + "topics": [ + "sessions" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-awake", + "type": "plugins", + "displayName": "Awake", + "repoUrl": "https://github.com/vvo/opencode-plugins", + "repoPath": "packages/awake", + "npmPackage": "opencode-awake", + "tagline": "Keeps your computer awake while a session works, even with the lid closed", + "description": "OpenCode plugin that keeps the computer from sleeping while a session is working, including lid-close sleep on MacBooks. Other sleep plugins only block idle sleep with caffeinate; this one also blocks lid sleep via pmset on macOS and systemd-inhibit on Linux, and releases it as soon as every session is idle.", + "kind": "plugin", + "topics": [ + "environment" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "sleep", + "caffeinate", + "macos", + "linux" + ], + "homepageUrl": "https://www.npmjs.com/package/opencode-awake", + "installation": "OpenCode 2:\n\n```sh\nopencode plugin add opencode-awake\n```\n\nOpenCode 1, in `opencode.json`:\n\n```json\n{ \"plugin\": [\"opencode-awake\"] }\n```\n\nOn macOS, allowing `pmset` without a password is needed for the closed-lid feature.\n" + }, + { + "productId": "opencode-background-tasks", + "type": "plugins", + "displayName": "opencode-background-tasks", + "repoUrl": "https://github.com/PrismKitty/opencode-background-tasks", + "tagline": "A sidebar list of the background shells and subagents still running in an OpenCode v2 session", + "description": "Adds a Background list to the OpenCode v2 session sidebar with every shell and subagent sent to the background, a live timer on each, and a done or failed mark when it ends.", + "kind": "plugin", + "topics": [ + "orchestration", + "ui" + ], + "compat": "v2", "scope": [ "global" ], @@ -835,6 +2391,80 @@ "repoUrl": "https://github.com/Alex-stack-cell/opencode-bmad-workflow", "tagline": "BMAD workflow plugin — automates epic, feature, sprint and code review workflows using specialized AI agents", "description": "Brings the BMAD (Breakthrough Method of Agile AI-Driven Development) methodology to OpenCode. Provides specialized agents for product management, architecture, development, and QA roles. Automates epic planning, feature breakdown, sprint workflows, and code reviews through a structured multi-agent pipeline.", + "kind": "plugin", + "topics": [ + "workflow", + "orchestration" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-boffin", + "type": "plugins", + "displayName": "Boffin", + "repoUrl": "https://github.com/MicSm/boffin", + "tagline": "Routed architectural guardrails for AI coding agents in OpenCode", + "description": "Staff-engineer layer for AI coding agents: routes per-edit architectural constraints and requires verification. Not another AGENTS.md.", + "kind": "plugin", + "topics": [ + "code-quality" + ], + "compat": "v2", + "scope": [ + "project" + ], + "tags": [ + "opencode", + "architecture", + "guardrails", + "code-review", + "cplusplus", + "python" + ], + "homepageUrl": "https://github.com/MicSm/boffin#readme", + "installation": "npx boffinit opencode" + }, + { + "productId": "opencode-cache-compact", + "type": "plugins", + "displayName": "opencode-cache-compact", + "repoUrl": "https://github.com/lennartschoch/opencode-cache-compact", + "tagline": "Cache-friendly compaction for locally hosted models", + "description": "Replaces OpenCode's built-in compaction, which rebuilds the prompt from scratch (no system prompt, no tools, history re-serialized) and therefore cold-prefills the whole conversation. This plugin appends the summary turn instead — a cache hit — and then rewrites only the outgoing message list down to that summary, so a locally hosted model reuses its KV cache instead of re-reading everything. Aimed at llama.cpp / LM Studio / vLLM setups where prefilling a large context is the expensive part.", + "kind": "plugin", + "topics": [ + "context" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "context", + "compaction", + "prompt-cache", + "local-models", + "llama.cpp" + ], + "minVersion": "1.17.9" + }, + { + "productId": "opencode-caelestia-notify", + "type": "plugins", + "displayName": "Opencode Caelestia Notify", + "repoUrl": "https://github.com/Shanu-Kumawat/opencode-caelestia-notify", + "tagline": "Desktop notifications when opencode finishes or needs your attention", + "description": "Sends a system notification when opencode finishes responding, hits an error, or waits for permission or input. Shows the session name so you know which task it is, and skips the done notification when your terminal is already focused. Built and tested on Caelestia shell, works on any Hyprland/Wayland desktop. Zero dependencies, single file.", + "kind": "plugin", + "topics": [ + "notifications" + ], + "compat": "v1", "scope": [ "global" ], @@ -847,6 +2477,12 @@ "repoUrl": "https://github.com/mailshieldai/opencode-canvas", "tagline": "Interactive terminal canvases in tmux splits", "description": "Interactive terminal canvases (calendars, documents, flight booking) in tmux splits. Port of claude-canvas for OpenCode.", + "kind": "plugin", + "topics": [ + "ui", + "environment" + ], + "compat": "v1", "scope": [ "global" ], @@ -859,6 +2495,28 @@ "repoUrl": "https://github.com/JasonLandbridge/opencode-ccs-sync", "tagline": "Claude Code Switch (CCS) to OpenCode sync", "description": "An OpenCode plugin that reads your Claude Code Switch (CCS) configuration and automatically syncs the providers into your OpenCode config.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-chat-workflow-setup", + "type": "plugins", + "displayName": "OpenCode Chat Workflow Setup", + "repoUrl": "https://github.com/Zaradacht/opencode-chat-workflow-setup", + "tagline": "Configure chat workflows and reusable templates before skills run", + "description": "Adds /setup-chat-workflows, /start-session, and /workflow-template commands. Workflows collect context, scope, gates, review modes, and reusable template choices before handing off to skills or actions.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v2", "scope": [ "global" ], @@ -868,9 +2526,14 @@ "productId": "opencode-chromium-browser-plugin", "type": "plugins", "displayName": "OpenCode Chromium Browser Plugin", - "repoUrl": "https://github.com/DJOCKER-FACE/opencode-chromium-browser-plugin", + "repoUrl": "https://github.com/Quindart-com/opencode-chromium-browser-plugin", "tagline": "Browser automation for Chromium browsers with a readable extension and native host", "description": "OpenCode browser automation for Chromium-based browsers using a readable Manifest V3 extension, Node.js native messaging host, and OpenCode-native tools. Supports Chrome, Edge, Brave, Chromium, screenshots, CDP commands, DOM actions, downloads, console/network inspection, and controlled tab sessions.", + "kind": "plugin", + "topics": [ + "web" + ], + "compat": "unknown", "scope": [ "project" ], @@ -883,6 +2546,23 @@ ], "homepageUrl": "https://github.com/DJOCKER-FACE/opencode-chromium-browser-plugin" }, + { + "productId": "opencode-clarify", + "type": "plugins", + "displayName": "OpenCode Clarify", + "repoUrl": "https://github.com/D-MSol4/opencode-clarify", + "tagline": "Rewrite rough prompts into precise technical prompts", + "description": "Rewrites rough, plain-language prompts into precise technical prompts with /clarify, /clarify:model, or a -clarify marker before you send them to the model. OpenCode 2 TUI plugin, ported from pi-clarify.", + "kind": "plugin", + "topics": [ + "prompting" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, { "productId": "opencode-claude-memory", "type": "plugins", @@ -890,6 +2570,185 @@ "repoUrl": "https://github.com/kuitos/opencode-claude-memory", "tagline": "Claude Code-compatible memory", "description": "Share persistent Markdown memory between OpenCode and Claude Code using Claude Code-compatible paths and file formats.", + "kind": "plugin", + "topics": [ + "memory" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-cmd-provider", + "type": "plugins", + "displayName": "Opencode CMD Provider", + "repoUrl": "https://github.com/rashidrazak/opencode-cmd-provider", + "tagline": "Use CommandCode plans (Go, GOAT, Pro, Max) as an OpenCode provider.", + "description": "OpenCode provider plugin for the CommandCode Provider API. Authenticate via\n/connect browser flow or COMMANDCODE_API_KEY, auto-registers all CommandCode\nmodels ([CMD] prefix) with offline snapshot, pricing display, and per-plan\ndeals/allowance intelligence in the sidebar and cmd_plan_summary tool.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "provider", + "commandcode", + "model-discovery", + "auth" + ] + }, + { + "productId": "opencode-cost-details", + "type": "plugins", + "displayName": "Cost Details", + "repoUrl": "https://github.com/vvo/opencode-plugins", + "repoPath": "packages/cost-details", + "npmPackage": "opencode-cost-details", + "tagline": "Shows current and previous turn cost in the sidebar Context section", + "description": "OpenCode TUI plugin that shows how much the current and previous prompt turns cost, right in the sidebar Context section next to the token count.", + "kind": "plugin", + "topics": [ + "cost", + "ui" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "cost", + "tokens", + "tui", + "sidebar" + ], + "homepageUrl": "https://www.npmjs.com/package/opencode-cost-details", + "installation": "OpenCode 2, in `~/.config/opencode/cli.json`:\n\n```json\n{\n \"plugins\": [\"-opencode.sidebar.context\", \"opencode-cost-details\"]\n}\n```\n\nOpenCode 1, in `~/.config/opencode/tui.json`:\n\n```json\n{ \"plugin\": [\"opencode-cost-details\"] }\n```\n" + }, + { + "productId": "opencode-craft", + "type": "plugins", + "displayName": "opencode-craft", + "repoUrl": "https://github.com/pauloralves/opencode-craft", + "npmPackage": "opencode-craft", + "tagline": "Senior pair programmer, craftsmanship coach, and knowledge ledger for OpenCode", + "description": "Transforms OpenCode into a seasoned Principal Engineer / Technical Craft Lead who builds software at full velocity while coaching system architecture, trade-offs, and interview readiness. Includes auto-synced LEARNING_PATH.md and @expand / @interview-angle skills.", + "kind": "plugin", + "topics": [ + "docs" + ], + "compat": "v1", + "scope": [ + "global", + "project" + ], + "tags": [ + "pair-programming", + "craftsmanship", + "interview-prep", + "learning-path", + "memory" + ], + "homepageUrl": "https://www.npmjs.com/package/opencode-craft", + "installation": "Add to your `opencode.json` (or `~/.config/opencode/opencode.jsonc`):\n\n```json\n{\n \"plugin\": [\n \"opencode-craft\"\n ]\n}\n```\n" + }, + { + "productId": "opencode-crosstalk", + "type": "plugins", + "displayName": "OpenCode Crosstalk", + "repoUrl": "https://github.com/MrDoe/opencode-crosstalk", + "tagline": "Peer discovery, messaging, and expiring file leases between concurrent OpenCode sessions", + "description": "Coordination for agents that share a workspace. Six tools let concurrent sessions\ndiscover each other, talk to each other, and take exclusive expiring leases on the\nfiles they are editing, so two agents never rewrite the same file at once.\n\n- `crosstalk_status` / `crosstalk_peers` — declare a role, goal, and working set, then list who is running, what they declared, and what they hold\n- `crosstalk_send` / `crosstalk_inbox` — message a session, a role, or everyone; mail lands in the recipient's mailbox and is injected into its current turn when the session is live\n- `crosstalk_claim` — atomic lease on files or named resources; a refusal names the holder and when the lease expires\n- `crosstalk_wait` — block until a peer goes idle or a resource is released, instead of sleeping and re-checking\n\nIdentity comes from the session rather than from tool input, so no session can\nrelease another's lease or read another's mail. All six tools share one permission\naction (`crosstalk`), so a project can allow or deny coordination with a single\nrule. The core coordination logic (presence registry, mailboxes, claim table) is\nhost-free and unit tested — the plugin imports nothing from OpenCode outside its\nsingle entry point.", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "multi-agent", + "coordination", + "file-locking", + "messaging", + "agents" + ], + "installation": "## Prerequisites\n- OpenCode 2.0.0 or later\n- Node.js 22.18+ (OpenCode runs the TypeScript source directly, there is no build step)\n\n## Install\n```bash\ngit clone https://github.com/MrDoe/opencode-crosstalk\ncd opencode-crosstalk && npm install\n```\n\n### Every project on this machine\n```bash\nnpm run setup # symlink this checkout into ~/.opencode/plugins/crosstalk\nnpm run uninstall # remove the link again\n```\n\nThe global `plugins/` directory is discovered automatically, so no config edit is\nneeded. Install into exactly one global root — linking both `~/.opencode/plugins/`\nand `~/.config/opencode/plugins/` loads the plugin twice per location. Set\n`CROSSTALK_PLUGINS_DIR` to target another directory.\n\n### One project\nAdd to `opencode.jsonc`:\n```json\n{\n \"$schema\": \"https://opencode.ai/config.json\",\n \"plugins\": [\"../opencode-crosstalk\"]\n}\n```\n\nOr symlink or copy the package into `.opencode/plugins/`, where it is discovered\nwith no configuration at all.\n\n## Configuration\nAll options are optional and are set with the object form of `plugins`:\n```json\n{\n \"plugins\": [\n {\n \"package\": \"../opencode-crosstalk\",\n \"options\": {\n \"scope\": \"project\",\n \"claimTtlMs\": 300000,\n \"codemode\": false\n }\n }\n ]\n}\n```\n\n| Option | Default | Meaning |\n| --- | --- | --- |\n| `namespace` | `crosstalk` | Tool namespace; dots are rejected. |\n| `permission` | `crosstalk` | Permission action for all six tools. |\n| `codemode` | `false` | Expose the tools through Code Mode instead of directly. |\n| `scope` | `project` | Peer visibility: `project`, `location`, or `server`. |\n| `claimTtlMs` | `300000` | Default lease duration. |\n| `maxWaitMs` | `120000` | Ceiling on any blocking call. |\n| `announce` | `true` | Add the coordination briefing to the system prompt. |\n\nBad values degrade to the default with a warning, so a typo never costs an agent\nits tools mid-session. See the README for the full option table.\n\n## Permissions\nNo rule is required to use the tools — OpenCode's base policy already allows the\n`crosstalk` action. Add a rule to control it instead:\n```json\n{\n \"permissions\": [{ \"action\": \"crosstalk\", \"resource\": \"*\", \"effect\": \"ask\" }]\n}\n```\n\n## Removal\n1. Run `npm run uninstall` in the checkout, or remove the symlinked directory\n2. Remove the `plugins` entry from `opencode.jsonc` if you added one\n3. `opencode service restart` if the plugin was already loaded in a running session\n", + "minVersion": "2.0.0" + }, + { + "productId": "opencode-cut", + "type": "plugins", + "displayName": "Cut", + "repoUrl": "https://github.com/aiev/opencode-cut", + "tagline": "Clipboard-aware Ctrl+X cut for prompt and dialog inputs", + "description": "Makes Ctrl+X cut selected text in prompt and dialog inputs. Copies to the system clipboard first and deletes only after the write succeeds; leaves the input untouched if the selection or focused editor changes, and ignores repeated cut requests while a copy is pending.", + "kind": "plugin", + "topics": [ + "ui" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-deepseek-peak", + "type": "plugins", + "displayName": "DeepSeek Peak", + "repoUrl": "https://github.com/aiev/opencode-deepseek-peak", + "tagline": "DeepSeek peak/off-peak pricing, Chinese holidays included", + "description": "Shows whether DeepSeek is in its peak or off-peak pricing window. Applies the official rule including Chinese public holidays, treats a response pricing header as the source of truth and flags mismatches, adds a compact next-change time (local or UTC, with weekday) in a single non-wrapping sidebar line, works before the first request via a preview marker, and speaks English, Portuguese, Chinese, Japanese, and Korean. Supports OpenCode V2 and V1.", + "kind": "plugin", + "topics": [ + "cost", + "providers" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-dir-tree-tui", + "type": "plugins", + "displayName": "opencode-dir-tree-tui", + "repoUrl": "https://github.com/aihaipeng/opencode-dir-tree-tui", + "tagline": "File tree sidebar with Git status and quick file actions", + "description": "Browse project files in the OpenCode V2 sidebar with Git status indicators, custom ignore rules, path copying, and quick file and folder opening.", + "kind": "plugin", + "topics": [ + "ui", + "git" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-docker-panel", + "type": "plugins", + "displayName": "OpenCode Docker Panel", + "repoUrl": "https://github.com/victor-ochenin/opencodeDockerPlugin", + "tagline": "Docker containers in the TUI sidebar, with control and logs", + "description": "Shows the running containers in the session sidebar with their state, published ports and compose project, and a pin keeps a container visible whatever its state. Clicking a row opens the actions docker accepts for that container's current state - start, stop, restart, tearing down its compose project behind a confirmation, or starting the stack declared by the compose file in the agent directory - and the same window doubles as a scrollable log view.", + "kind": "plugin", + "topics": [ + "environment", + "ui" + ], + "compat": "v2", "scope": [ "global" ], @@ -900,8 +2759,15 @@ "type": "plugins", "displayName": "OpenCode Ensemble", "repoUrl": "https://github.com/hueyexe/opencode-ensemble", + "npmPackage": "@hueyexe/opencode-ensemble", "tagline": "Parallel agent teams for OpenCode", "description": "Coordinate parallel OpenCode agents with peer messaging, a shared task board, git worktree isolation, and a live dashboard.", + "kind": "plugin", + "topics": [ + "orchestration", + "git" + ], + "compat": "v2", "scope": [ "global" ], @@ -915,24 +2781,121 @@ "homepageUrl": "https://www.npmjs.com/package/@hueyexe/opencode-ensemble" }, { - "productId": "opencode-github-release", + "productId": "opencode-fold-tools", "type": "plugins", - "displayName": "GitHub Release", - "repoUrl": "https://github.com/amestsantim/opencode-github-release", - "tagline": "Automated GitHub releases", - "description": "Create and publish GitHub releases with semantic versioning, tag management, and auto-generated release notes.", + "displayName": "opencode-fold-tools", + "repoUrl": "https://github.com/ningzimu/opencode-fold-tools", + "tagline": "Expand tool outputs on click, with one row per call and native file diffs.", + "description": "Keeps each OpenCode TUI tool call on its own line in conversation order.\nClick to reveal output underneath while preserving the input summary,\nor use Ctrl+O to toggle all matched rows. Retains native colored file diffs\nand provides a full tool-record viewer. Includes npm installation and a GIF demo.", + "kind": "plugin", + "topics": [ + "ui" + ], + "compat": "v2", "scope": [ "global" ], "tags": [] }, + { + "productId": "opencode-free-models", + "type": "plugins", + "displayName": "Free Models Router", + "repoUrl": "https://github.com/murcanlat/opencode-free-models", + "tagline": "Free model discovery, prompt routing, and seamless quota fallback", + "description": "Discovers free models from OpenRouter and models.dev, routes each prompt to the best free candidate by capability and score, and falls back to the next free model on rate limits, quota exhaustion, or 5xx errors. Ships cycle/stop/retry-last/wait fallback modes, cooldowns, configurable backoff, an optional circuit breaker, status/refresh/select tools, an RPC API, and an optional TUI plugin for toast notifications.", + "kind": "plugin", + "topics": [ + "providers", + "cost" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "models", + "routing", + "fallback", + "rate-limit", + "free-models", + "openrouter" + ], + "installation": "Add it to `opencode.jsonc`:\n\n```jsonc\n{\n \"$schema\": \"https://opencode.ai/config.json\",\n \"plugins\": [\"opencode-free-models\"]\n}\n```\n\nOr install from the CLI:\n\n```sh\nopencode plugin add opencode-free-models\n```\n\nOptional TUI toasts: add `\"opencode-free-models/tui\"` to the `plugins` array\nin `cli.json`.\n", + "minVersion": "2.0.16" + }, + { + "productId": "opencode-github-release", + "type": "plugins", + "displayName": "GitHub Release", + "repoUrl": "https://github.com/amestsantim/opencode-github-release", + "tagline": "Automated GitHub releases", + "description": "Create and publish GitHub releases with semantic versioning, tag management, and auto-generated release notes.", + "kind": "plugin", + "topics": [ + "git" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-go-whoami", + "type": "plugins", + "displayName": "opencode-go-whoami", + "repoUrl": "https://github.com/senorMk/opencode-go-whoami", + "tagline": "Display local email labels for OpenCode Go/Zen accounts", + "description": "Identify your OpenCode Go/Zen accounts through user-assigned email labels, a permanent sidebar panel, and /go-whoami. Runs locally and displays only masked keys and fingerprints.", + "kind": "plugin", + "topics": [ + "providers", + "ui" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [], + "minVersion": "2.0.0" + }, + { + "productId": "opencode-goal", + "type": "plugins", + "displayName": "Goal", + "repoUrl": "https://github.com/KelpHect/opencode-goal", + "tagline": "Persistent /goal mode that keeps a session working across turns", + "description": "A port of OpenAI Codex's /goal for OpenCode v2. Registers a /goal command plus create_goal/get_goal/update_goal tools. The session keeps re-prompting itself until the objective is complete, with token budgets, completion audits, and a bundled goal skill.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "workflow", + "agents" + ], + "installation": "```bash\nopencode plugin add github:KelpHect/opencode-goal\n```\nPin a release with `github:KelpHect/opencode-goal#v0.2.1`.\n", + "minVersion": "2.0.0" + }, { "productId": "opencode-goopspec", "type": "plugins", "displayName": "GoopSpec", - "repoUrl": "https://github.com/hffmnnj/opencode-goopspec", + "repoUrl": "https://github.com/hffmnnj/goopspec", "tagline": "Spec-driven development workflow", "description": "Transforms AI-assisted coding with spec-driven workflows. Features 5-phase workflow (Plan, Research, Specify, Execute, Accept), contract gates for user confirmation, 12 specialized subagents, persistent memory system, wave-based execution with atomic commits, and deviation rules for handling unexpected situations.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v2", "scope": [ "global" ], @@ -945,6 +2908,12 @@ "repoUrl": "https://github.com/yuji-hatakeyama/opencode-gpt-imagegen", "tagline": "gpt-image-2 in OpenCode — no API cost when using your ChatGPT subscription", "description": "Brings gpt-image-2 (ChatGPT Images 2) image generation to OpenCode. When you sign into OpenCode with your ChatGPT account, generations are billed against your existing Plus / Pro / Business plan — no per-image API cost. An OpenAI API key path is also planned. Supports reference images for style guidance and edits.", + "kind": "plugin", + "topics": [ + "media", + "providers" + ], + "compat": "v1", "scope": [ "global" ], @@ -967,6 +2936,11 @@ "repoUrl": "https://github.com/romain325/opencode-hooks-plugin", "tagline": "Claude code compatible hooks", "description": "Use Claude code hooks definition and hook them to opencode hooks.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v1", "scope": [ "global" ], @@ -977,8 +2951,15 @@ "type": "plugins", "displayName": "Opencode Host Notify Bridge", "repoUrl": "https://github.com/Zaradacht/opencode-host-notify-bridge", + "npmPackage": "opencode-host-notify-bridge", "tagline": "Devcontainer notifications bridged back to the host", "description": "OpenCode plugin and host helper that forward permission, question, and idle notifications from devcontainers to the host machine for desktop alerts and sound.", + "kind": "plugin", + "topics": [ + "notifications", + "environment" + ], + "compat": "v1", "scope": [ "global" ], @@ -991,6 +2972,34 @@ "homepageUrl": "https://github.com/Zaradacht/opencode-host-notify-bridge", "installation": "Add the plugin to `~/.config/opencode/opencode.json`:\n\n```json\n{\n \"$schema\": \"https://opencode.ai/config.json\",\n \"plugin\": [\"opencode-host-notify-bridge\"]\n}\n```\n\nThen configure `host-notify-bridge.json` and start the host helper:\n\n```bash\nopencode-host-notify-server\n```\n" }, + { + "productId": "opencode-idea-inbox", + "type": "plugins", + "displayName": "Idea Inbox", + "repoUrl": "https://github.com/apilot/opencode-idea-inbox", + "npmPackage": "opencode-idea-inbox", + "tagline": "Capture stray thoughts into a sidebar backlog, then dispatch them to agents without derailing your session", + "description": "A persistent idea backlog for the opencode v2 TUI. Mid-conversation, press leader+z (or run /idea) to park a thought in the Idea Inbox sidebar without leaving your current task — no notes app, no derailing the agent. When you have a free moment, press leader+i and pick a pending idea: a delegation mission lands in your current session and execution starts immediately, while the sidebar status flips from parked to running to done as the agent works. Agents can manage the backlog themselves through idea_add/idea_list/ idea_update/idea_start tools, and a \"documented\" status archives an idea after its result is written up. Storage is per-worktree SQLite, so the backlog survives restarts. Ships for opencode v2 (this entry) and as a legacy v1 line: opencode-idea-inbox@legacy-v1.", + "kind": "plugin", + "topics": [ + "workflow", + "ui" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "productivity", + "backlog", + "tui", + "sidebar", + "workflow" + ], + "installation": "## Installation (opencode v2)\n\nAdd one line to the `plugins` key of your `opencode.json` — global\n(`~/.config/opencode/opencode.json`) or per-project:\n\n```jsonc\n{\n \"plugins\": [\"opencode-idea-inbox\"]\n}\n```\n\nOne entry loads both halves of the plugin: the server part (tools, events,\nslash commands) and the TUI part (sidebar, hotkeys). Restart opencode.\n\nNote: opencode v2 reads the `plugins` key (plural). The v1 `plugin` key is\nsilently ignored — that is the #1 \"it doesn't load\" cause.\n\nOn opencode v1? Install the legacy line instead:\n`\"plugin\": [\"opencode-idea-inbox@legacy-v1\"]`.\n", + "minVersion": "2.0.20" + }, { "productId": "opencode-ignore", "type": "plugins", @@ -998,6 +3007,119 @@ "repoUrl": "https://github.com/lgladysz/opencode-ignore", "tagline": "Ignore files based on pattern", "description": "Plugin to ignore directory/file based on pattern.", + "kind": "plugin", + "topics": [ + "context", + "security" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-indexing", + "type": "plugins", + "displayName": "OpenCode Indexing", + "repoUrl": "https://github.com/Javierkaiser/opencode-indexing", + "tagline": "Semantic code search for OpenCode that reuses Kilo Code's index and keeps its own incremental one.", + "description": "Adds semantic (vector) code search to OpenCode. It reads Kilo Code's existing\nindex (Qdrant ws-* collections and Kilo's local LanceDB) without ever modifying\nit, and can import those vectors and chunks at zero embedding cost, then keep\nits own incremental index (Qdrant oc-* collections or embedded LanceDB) keyed\non a per-file SHA-256. Search merges results from both indexes, so semantic\nsearch keeps working even when Kilo is not installed, is disabled, or its index\nis stale.\n\n- Reuse Kilo Code's index read-only, importing vectors without re-embedding\n- Own incremental index with manifest-based freshness (new/changed/deleted only)\n- Vector-store agnostic: Qdrant or embedded LanceDB\n- Settings and index actions from the TUI, Desktop and web clients\n- Supported embedding providers: Mistral, OpenAI, Ollama, Gemini, Voyage,\n OpenRouter and any OpenAI-compatible endpoint", + "kind": "plugin", + "topics": [ + "code-intel" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "semantic-search", + "code-search", + "indexing", + "embeddings", + "qdrant", + "lancedb" + ], + "homepageUrl": "https://github.com/Javierkaiser/opencode-indexing#readme", + "installation": "## Prerequisites\n- OpenCode v2 (plugin API `@opencode/plugin` 2.x)\n- Node.js >= 22.6\n- Optional: a Qdrant server and/or the `@lancedb/lancedb` module\n\n## Installation\n\n### Installer (recommended, cross-platform)\n\n```bash\n# Linux / macOS\n./install.sh\n# Windows\npowershell -ExecutionPolicy Bypass -File .\\install.ps1\n# any platform (the wrappers call this)\nnode install.mjs\n```\n\n### From npm\n\n```bash\nnpm install @javierkaiser/opencode-indexing\n```\n\nThen reference it from `opencode.json`:\n\n```jsonc\n{\n \"plugins\": [\n { \"package\": \"@javierkaiser/opencode-indexing\" }\n ]\n}\n```\n\n## Configuration\n\nSettings live in `~/.config/opencode/indexing.json` and are editable from\n`/indexing-config` (any client) or the `/indexing` page (terminal TUI).\n", + "minVersion": "2.0.0" + }, + { + "productId": "opencode-lens", + "type": "plugins", + "displayName": "Lens", + "repoUrl": "https://github.com/Flickwire-Agent/opencode-lens", + "tagline": "Plugin injection framework for OpenCode Web", + "description": "A local reverse proxy that loads web plugins and injects them into the OpenCode Web HTML response. Adds script injection, an integrated settings UI for toggling plugins, and a simple manifest format for building browser-side OpenCode Web plugins. Enables extending the OpenCode Web UI with custom JavaScript modules, HTML injection, and interactive controls.", + "kind": "plugin", + "topics": [ + "ui" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-lens-image-preview", + "type": "plugins", + "displayName": "Image Preview", + "repoUrl": "https://github.com/Flickwire-Agent/opencode-lens-image-preview", + "tagline": "Inline image previews from URLs in OpenCode Web", + "description": "A Lens plugin that renders images from URLs inline in OpenCode Web chat. Supports markdown image syntax (\\![alt](url)) and raw image URLs. Features click-to-expand, lazy loading, code block protection, and error fallbacks.", + "kind": "plugin", + "topics": [ + "media", + "ui" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-lens-wuxiaoqiang12", + "type": "plugins", + "displayName": "opencode-lens", + "repoUrl": "https://github.com/wuxiaoqiang12/opencode-lens", + "npmPackage": "opencode-lens", + "tagline": "TUI bridge and MCP toolkit for inspecting and controlling live opencode sessions", + "description": "opencode-lens is an opencode TUI plugin plus MCP server that lets external agents inspect running opencode instances, send prompts, read messages/diffs/todos, handle permission and question prompts, and monitor session completion through a local Unix socket bridge.", + "kind": "plugin", + "topics": [ + "sessions", + "ui", + "observability" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [ + "mcp", + "tui", + "automation", + "sessions", + "monitoring" + ], + "homepageUrl": "https://github.com/wuxiaoqiang12/opencode-lens", + "installation": "Add the TUI plugin to `~/.config/opencode/tui.json`:\n\n```json\n{\n \"$schema\": \"https://opencode.ai/tui.json\",\n \"plugin\": [\"opencode-lens\"]\n}\n```\n\nRestart opencode. opencode resolves and caches the npm plugin package automatically.\n\nFor Hermes or other MCP clients, run the MCP server with `npx`:\n\n```yaml\nmcp_servers:\n opencode-lens:\n command: npx\n args:\n - -y\n - opencode-lens-mcp\n enabled: true\n```\n" + }, + { + "productId": "opencode-listen-stt", + "type": "plugins", + "displayName": "Listen STT", + "repoUrl": "https://github.com/fahrim/opencode-listen-stt", + "tagline": "Offline dictation, 99 languages", + "description": "Voice dictation for OpenCode V2 on Windows. Runs whisper.cpp locally across 99 languages, pins the spoken language so it is not mis-detected, and uses CUDA or Vulkan automatically. Nothing leaves the machine.", + "kind": "plugin", + "topics": [ + "voice" + ], + "compat": "v2", "scope": [ "global" ], @@ -1009,7 +3131,12 @@ "displayName": "Opencode LiteLLM", "repoUrl": "https://github.com/yuseferi/opencode-litellm", "tagline": "Auto-discover models from a LiteLLM proxy", - "description": "Drop-in LiteLLM provider for OpenCode with zero configuration. Auto-detects a running\nLiteLLM proxy on common ports (4000, 8000, 8080), pulls every model from /v1/models,\nand registers them in OpenCode automatically — no model lists to hand-maintain. Smart\nname formatting, modality categorization (chat/embedding/image/audio), provider\nextraction, optional API-key auth, and a 5-second timeout so a slow proxy never blocks\nstartup.\n", + "description": "Drop-in LiteLLM provider for OpenCode with zero configuration. Auto-detects a running\nLiteLLM proxy on common ports (4000, 8000, 8080), pulls every model from /v1/models,\nand registers them in OpenCode automatically — no model lists to hand-maintain. Smart\nname formatting, modality categorization (chat/embedding/image/audio), provider\nextraction, optional API-key auth, and a 5-second timeout so a slow proxy never blocks\nstartup.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v2", "scope": [ "global", "project" @@ -1029,6 +3156,11 @@ "repoUrl": "https://github.com/errhythm/opencode-log-sanitizer", "tagline": "Sanitizes pasted logs by redacting long strings, JWTs, bcrypt hashes, and base64 blobs", "description": "Sanitizes pasted logs before sending them to AI by redacting long quoted strings, JWT tokens, bcrypt hashes, and base64 blobs to reduce token usage and remove irrelevant noise.", + "kind": "plugin", + "topics": [ + "security" + ], + "compat": "v1", "scope": [ "global" ], @@ -1039,8 +3171,57 @@ "type": "plugins", "displayName": "Opencode Mem", "repoUrl": "https://github.com/tickernelz/opencode-mem", - "tagline": "Persistent memory with vector database", - "description": "A persistent memory system for AI coding agents that enables long-term context retention across sessions using local vector database technology. Features dual memory scopes, web interface, auto-capture system, and multi-provider AI support.", + "tagline": "Persistent local memory with Turso/libSQL vector search", + "description": "A persistent memory system for AI coding agents that enables long-term context retention across sessions using embedded Turso/libSQL vector search. Features dual memory scopes, auto-capture, user profile learning, a full web UI, and multi-provider AI support.", + "kind": "plugin", + "topics": [ + "memory" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-mempalace-persistence", + "type": "plugins", + "displayName": "Opencode MemPalace Persistence", + "repoUrl": "https://github.com/geco/opencode-mempalace-persistence", + "npmPackage": "opencode-mempalace-persistence", + "tagline": "Local-first persistent memory for OpenCode, backed by MemPalace", + "description": "Saves every conversation to a local MemPalace palace and recalls it verbatim in later sessions. Mines run on idle, exit and startup — never mid-reply. Zero-config: the plugin registers its own read-only MCP entry, so multiple OpenCode tabs never starve each other on the palace writer lock. Ships a live sidebar status line and a companion local browser/curator (penfield) for timeline, knowledge graph, thread view and duplicate healing.", + "kind": "plugin", + "topics": [ + "memory" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "memory", + "mempalace", + "persistence", + "knowledge-graph", + "mcp" + ], + "homepageUrl": "https://www.npmjs.com/package/opencode-mempalace-persistence", + "installation": "1. Install MemPalace: `pipx install mempalace` then `mempalace init ~/opencode-memory`\n2. Add to `~/.config/opencode/opencode.json`:\n ```json\n { \"plugin\": [\"opencode-mempalace-persistence\"] }\n ```\n3. Restart OpenCode. The plugin registers its own read-only MemPalace MCP entry; to backfill existing history once, run `OPENCODE_MEMPALACE_BACKFILL=1 opencode`.", + "minVersion": "1.18.29" + }, + { + "productId": "opencode-mesh", + "type": "plugins", + "displayName": "OpenCode Mesh", + "repoUrl": "https://github.com/divisionseven/opencode-mesh", + "tagline": "The missing agent-to-agent messenger for OpenCode", + "description": "The free OpenCode plugin that lets your agents communicate directly with any session on your machine. Separate projects, separate terminals, separate models, one connected team.", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v2", "scope": [ "global" ], @@ -1053,6 +3234,63 @@ "repoUrl": "https://github.com/nigel-dev/opencode-mission-control", "tagline": "Command center for parallel agents — worktree isolation, DAG plans, merge train, PRs", "description": "Orchestrates parallel OpenCode agents in tmux-isolated git worktrees with live inspection (capture/attach/diff), a dashboard overview, agent status reporting, and in-chat notifications. Supports DAG-based plans with autopilot/copilot/supervisor modes and a merge train with test gating and automatic rollback.", + "kind": "plugin", + "topics": [ + "orchestration", + "git" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-mlflow-plugin", + "type": "plugins", + "displayName": "opencode-mlflow-plugin", + "repoUrl": "https://github.com/MunhozThiago/opencode-mlflow-plugin", + "tagline": "Track OpenCode session metrics and tool execution timings in MLflow.", + "description": "Records OpenCode sessions as MLflow runs with message and tool counts, tool execution timings, and agent, model, and provider tags. Connects to a local MLflow tracking server for comparing session metrics. Available on npm as opencode-mlflow-plugin.", + "kind": "plugin", + "topics": [ + "observability" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-model-alias", + "type": "plugins", + "displayName": "OpenCode Model Alias", + "repoUrl": "https://github.com/renaudcerrato/opencode-model-alias", + "tagline": "Portable model aliases with variants and chains — one config entry, per-machine remapping", + "description": "Define short model aliases (cheap, smart, reviewer...) in a central alias file and reference them in any agent or command model field. Each machine maps aliases to whatever provider/model it prefers, so shared agent and command configs stay portable across machines and providers. Supports model variants, alias chains (stable role names layered on machine-specific mappings), and a /alias command for managing aliases in-session.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-model-aliases", + "type": "plugins", + "displayName": "OpenCode Model Aliases", + "repoUrl": "https://github.com/vmvarela/opencode-model-aliases", + "tagline": "Provider-scoped aliases for the newest eligible OpenCode models", + "description": "Create stable model IDs within a provider using glob, capability, and context filters. On catalog refresh, each alias resolves to the newest eligible model already in OpenCode's catalog.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v2", "scope": [ "global" ], @@ -1065,6 +3303,29 @@ "repoUrl": "https://github.com/yuhp/opencode-models-discovery", "tagline": "Configurable model discovery and filtering without long manual config", "description": "OpenCode plugin for discovering models from OpenAI-compatible providers and API gateways, with provider and model filtering so users can avoid maintaining large configs or loading every model at once.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-multi-usage", + "type": "plugins", + "displayName": "OpenCode Multi-Usage", + "repoUrl": "https://github.com/Bugg4/opencode-multi-usage", + "tagline": "One OpenCode plugin for multiple AI subscription quotas", + "description": "An easily extensible OpenCode plugin for tracking AI subscription quotas. Add provider integrations with minimal effort; each is opt-in, with support for ChatGPT Codex, OpenCode Go, CommandCode and more.", + "kind": "plugin", + "topics": [ + "cost", + "providers" + ], + "compat": "v2", "scope": [ "global" ], @@ -1077,6 +3338,12 @@ "repoUrl": "https://github.com/vbgate/opencode-mystatus", "tagline": "Check AI subscription quotas", "description": "Check all your AI subscription quotas in one command. Supports OpenAI (Plus/Pro/Codex, etc.), Zhipu AI, Google Antigravity, and more.", + "kind": "plugin", + "topics": [ + "cost", + "providers" + ], + "compat": "v1", "scope": [ "global" ], @@ -1089,6 +3356,11 @@ "repoUrl": "https://github.com/kdcokenny/opencode-notify", "tagline": "Native OS notifications", "description": "Native OS notifications for OpenCode - know when tasks complete.", + "kind": "plugin", + "topics": [ + "notifications" + ], + "compat": "v1", "scope": [ "global" ], @@ -1101,11 +3373,68 @@ "repoUrl": "https://github.com/lannuttia/opencode-ntfy.sh", "tagline": "Push notifications to keep you in the know, even when you're on the go.", "description": "An OpenCode plugin that adds push notifications through ntfy.sh.", + "kind": "plugin", + "topics": [ + "notifications" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "opencode-obvious-grid", + "type": "plugins", + "displayName": "OpenCode Obvious Grid", + "repoUrl": "https://github.com/ray062/opencode-obvious-grid", + "npmPackage": "opencode-obvious-grid", + "tagline": "The obvious grid — know what every agent is doing from across the room", + "description": "Ever squinted at five terminals trying to figure out who's actually working? This plugin puts every opencode instance on one big screen as a giant color-coded card — orange = working, blue = waiting on you, red = errored, green = idle. Readable from across the room, so \"obvious\" is not just a vibe, it's a font size. Stick it on the wall display and you'll never walk over to squint again. It's a grid, but make it fashion: each card carries live tokens, cost, cache rates, speed graphs, git branch, and deep links into web sessions — plus built-in ntfy push and alarm-sound notifications, because even an obvious grid needs to yell at you sometimes. Zero infrastructure: the plugin serves its own page. One install. Infinite peace of mind. Your agents will never know they're being watched.", + "kind": "plugin", + "topics": [ + "observability", + "ui", + "notifications" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [ + "status", + "dashboard", + "monitoring", + "notifications" + ], + "installation": "Run `opencode plugin opencode-obvious-grid -g`, restart opencode, and open http://localhost:8765." + }, + { + "productId": "opencode-orchestrator", + "type": "plugins", + "displayName": "Orchestrator", + "repoUrl": "https://github.com/KelpHect/opencode-orchestrator", + "tagline": "Cost-aware subagent routing skill plus injected orchestration instructions", + "description": "Teaches the primary agent to route work to the right subagent tier: an `orchestrator` skill with routing rules, prompt templates and an escalation ladder; routing rules injected into primary sessions; subagent conduct rules injected into child sessions; and example agent-tier definitions.", + "kind": "plugin", + "topics": [ + "orchestration", + "providers", + "cost" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "orchestration", + "agents", + "skills" + ], + "installation": "```bash\nopencode plugin add github:KelpHect/opencode-orchestrator\n```\nMerge `examples/opencode.jsonc` into your config to define the agent tiers.\nPin a release with `github:KelpHect/opencode-orchestrator#v0.1.1`.\n", + "minVersion": "2.0.0" + }, { "productId": "opencode-personality", "type": "plugins", @@ -1113,6 +3442,11 @@ "repoUrl": "https://github.com/joostvanwollingen/opencode-personality", "tagline": "A configurable personality and mood system plugin for OpenCode.", "description": "Give your AI assistant a distinct personality with customizable moods that drift over time.", + "kind": "plugin", + "topics": [ + "prompting" + ], + "compat": "v1", "scope": [ "global" ], @@ -1125,6 +3459,11 @@ "repoUrl": "https://github.com/yurihbm/opencode-plan-manager", "tagline": "AI-Native Implementation Planning for Modern Agentic Workflows", "description": "High-performance, minimalist plugin designed to bridge the gap between complex implementation strategies and autonomous execution. Selective context loading, zero-hallucination schemas, visible filesystem kanban.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v1", "scope": [ "global" ], @@ -1137,6 +3476,11 @@ "repoUrl": "https://github.com/Octane0411/opencode-plugin-openspec", "tagline": "Add Architecture planning and specification agent for OpenSpec", "description": "An OpenCode plugin that integrates OpenSpec, providing a dedicated agent for planning and specifying software architecture.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v1", "scope": [ "global" ], @@ -1149,6 +3493,11 @@ "repoUrl": "https://github.com/DEVtheOPS/opencode-plugin-otel", "tagline": "OpenTelemetry telemetry exporter for opencode sessions, mirroring Claude Code monitoring signals", "description": "Exports metrics, logs, and traces from opencode sessions via OTLP/gRPC to any OpenTelemetry-compatible backend (Datadog, Honeycomb, Grafana Cloud, etc.). Instruments session lifecycle, token usage, cost, tool durations, and git commits — mirroring the same signals as Claude Code's monitoring.", + "kind": "plugin", + "topics": [ + "observability" + ], + "compat": "v2", "scope": [ "global" ], @@ -1161,6 +3510,28 @@ "repoUrl": "https://github.com/arttttt/opencode-pr-signature", "tagline": "Automatically adds AI model signature to PRs, Issues, and Commits", "description": "Plugin that automatically appends AI model signature to Pull Requests, Issues, and git commit messages. Supports GitHub MCP tools, git CLI, and gh CLI. Recognizes 90+ AI models including Claude, GPT, Gemini, DeepSeek, Llama, Mistral, and more.", + "kind": "plugin", + "topics": [ + "git" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-pre-tool-review", + "type": "plugins", + "displayName": "opencode-pre-tool-review", + "repoUrl": "https://github.com/yehweihsu/opencode-pre-tool-review", + "tagline": "Model-assisted pre-execution review for OpenCode V2 tool permissions", + "description": "Experimental OpenCode V2 plugin that reviews tool permission checks using a configurable reviewer model before execution. Integrates with OpenCode's native permission system, supports conservative read-only whitelisting, and offers user-confirmed one-time releases for blocked actions.", + "kind": "plugin", + "topics": [ + "security" + ], + "compat": "v2", "scope": [ "global" ], @@ -1173,6 +3544,79 @@ "repoUrl": "https://github.com/baranwang/opencode-provider-alias", "tagline": "Alias and curate OpenCode providers with model metadata from models.dev.", "description": "Lets users define local OpenCode provider and model aliases hydrated from existing models.dev metadata.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-provider-guard", + "type": "plugins", + "displayName": "OpenCode Provider Guard", + "repoUrl": "https://github.com/okram78/opencode-provider-guard", + "tagline": "Restrict available providers by project directory", + "description": "An OpenCode V2 plugin that lets you choose which providers are available in\neach project, so you can keep personal or pay-as-you-go providers out of\nselected projects.", + "kind": "plugin", + "topics": [ + "providers", + "security", + "prompting" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "provider", + "allowlist", + "access-control", + "directory-rules" + ] + }, + { + "productId": "opencode-prs", + "type": "plugins", + "displayName": "PRs", + "repoUrl": "https://github.com/vvo/opencode-plugins", + "repoPath": "packages/prs", + "npmPackage": "opencode-prs", + "tagline": "Lists GitHub pull requests referenced by the current session", + "description": "OpenCode TUI plugin that lists GitHub pull requests opened by the current session in the sidebar, with titles scrolling on hover. Requires an installed and authenticated GitHub CLI.", + "kind": "plugin", + "topics": [ + "git", + "ui" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "github", + "pull-requests", + "tui", + "sidebar" + ], + "homepageUrl": "https://www.npmjs.com/package/opencode-prs", + "installation": "OpenCode 2, in `~/.config/opencode/cli.json`:\n\n```json\n{ \"plugins\": [\"opencode-prs\"] }\n```\n\nOpenCode 1, in `~/.config/opencode/tui.json`:\n\n```json\n{ \"plugin\": [\"opencode-prs\"] }\n```\n" + }, + { + "productId": "opencode-qoder-bridge", + "type": "plugins", + "displayName": "Qoder Bridge for OpenCode", + "repoUrl": "https://github.com/naoufalelbani/opencode-qoder-bridge", + "tagline": "Use Qoder AI models in OpenCode via the official Qoder Agent SDK, with tools, MCP, sessions, and quota tracking.", + "description": "OpenCode plugin that integrates Qoder AI models through the official Qoder Agent SDK. Provides dynamic model discovery, streaming, tool calling, MCP integration, multimodal input, persistent sessions, live quota visibility, and usage tracking.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v2", "scope": [ "global" ], @@ -1185,11 +3629,36 @@ "repoUrl": "https://github.com/slkiser/opencode-quota", "tagline": "Quota toasts and token tracking", "description": "Track quota and token usage across providers via automatic toasts and slash commands.", + "kind": "plugin", + "topics": [ + "cost", + "notifications" + ], + "compat": "v2", "scope": [ "global" ], "tags": [] }, + { + "productId": "opencode-quota-board", + "type": "plugins", + "displayName": "Quota Board", + "repoUrl": "https://github.com/gilvex/opencode-quota-board", + "tagline": "Provider quotas, reset countdowns, and credit balances in the OpenCode V2 terminal", + "description": "V2-native quota sidebar and /quota popup using existing active provider connections. Displays remaining allowances, reset countdowns, and credit balances, with collapsible providers, persistent visibility and pinning preferences, and stale-value retention after failed refreshes. Includes adapters for OpenAI, Anthropic, OpenCode Console, OpenRouter, Z.AI, Synthetic, and MiniMax.", + "kind": "plugin", + "topics": [ + "cost", + "providers" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [], + "minVersion": "2.0.28" + }, { "productId": "opencode-quotes-plugin", "type": "plugins", @@ -1197,6 +3666,11 @@ "repoUrl": "https://github.com/aerovato/opencode-quotes-plugin", "tagline": "Display inspirational quotes instead of tips", "description": "Replaces the default home-page tips with inspirational quotes for a more motivating OpenCode experience.", + "kind": "plugin", + "topics": [ + "ui" + ], + "compat": "v1", "scope": [ "global" ], @@ -1208,7 +3682,12 @@ "displayName": "OpenCodeRAG", "repoUrl": "https://github.com/MrDoe/OpenCodeRAG", "tagline": "Local-first RAG plugin for semantic code search with tree-sitter chunking and LanceDB", - "description": "A local-first Retrieval-Augmented Generation plugin for OpenCode that enables semantic code\nsearch across your workspace. Features AST-aware chunking via tree-sitter (19 languages),\nincremental indexing with file-change detection, watch mode for live re-indexing, and\nconfigurable embeddings via Ollama (default) or OpenAI. Includes a CLI (index, query, status,\nclear) and an OpenCode plugin with a chunk retrieval tool + automatic chat.message file\nsuggestions. All processing stays local by default — no data leaves the machine.\n", + "description": "A local-first Retrieval-Augmented Generation plugin for OpenCode that enables semantic code\nsearch across your workspace. Features AST-aware chunking via tree-sitter (19 languages),\nincremental indexing with file-change detection, watch mode for live re-indexing, and\nconfigurable embeddings via Ollama (default) or OpenAI. Includes a CLI (index, query, status,\nclear) and an OpenCode plugin with a chunk retrieval tool + automatic chat.message file\nsuggestions. All processing stays local by default — no data leaves the machine.", + "kind": "plugin", + "topics": [ + "code-intel" + ], + "compat": "v2", "scope": [ "global" ], @@ -1221,6 +3700,12 @@ "repoUrl": "https://github.com/saim-x/opencode-research-papers", "tagline": "Search arXiv and OpenAlex for research papers with recency and citation filtering", "description": "OpenCode plugin that adds a research_papers tool for searching scholarly literature. Uses arXiv for fresh preprints and OpenAlex for broader metadata, citation counts, and open-access links. Supports filtering by latest, trending, or top-cited papers.", + "kind": "plugin", + "topics": [ + "docs", + "web" + ], + "compat": "v1", "scope": [ "global" ], @@ -1233,6 +3718,11 @@ "repoUrl": "https://github.com/sun-praise/opencode-review", "tagline": "Automatic structured code review with configurable dimensions and auto-fix", "description": "An automatic code review plugin for OpenCode CLI. Reviews staged changes when session goes idle, with configurable cooldown, multi-dimension analysis (code quality, security, performance, testing, documentation), severity levels, and auto-fix chain support.", + "kind": "plugin", + "topics": [ + "code-quality" + ], + "compat": "v1", "scope": [ "global" ], @@ -1242,9 +3732,225 @@ "productId": "opencode-roadmap", "type": "plugins", "displayName": "Opencode Roadmap", - "repoUrl": "https://github.com/IgorWarzocha/Opencode-Roadmap", + "repoUrl": "https://github.com/IgorWarzocha/opencode-planning-toolkit", "tagline": "Strategic planning", "description": "Strategic roadmap planning and multi-agent coordination plugin. Provides project-wide planning capabilities.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-safety-gates", + "type": "plugins", + "displayName": "opencode-safety-gates", + "repoUrl": "https://github.com/yg-codes/opencode-safety-gates", + "tagline": "Run Claude Code bash-gate scripts inside OpenCode, deny self-revoking commands, catch fabricated CLI syntax.", + "description": "Safety gates for OpenCode built on the V2 plugin API, with zero runtime dependencies. Wraps the built-in bash tool executor and runs your Claude Code PreToolUse/Bash gate scripts unchanged, from the same settings.json wiring — one script enforces in both tools. Ships a bundled example gate (options.exampleGates) that denies self-revoking commands — service stops that destroy the session's own access to the host (sssd, sshd, NetworkManager, firewalld, iptables flush, SSSD cache wipe). A config-driven verify-cli-syntax guard sends one corrective prompt per session when a reply recommends CLI syntax the session shows no verification for (--help, man page, or upstream source). Setup logs a health line with the active gate count, so a dead gate is never silent.", + "kind": "plugin", + "topics": [ + "security" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-scratchpad", + "type": "plugins", + "displayName": "OpenCode Scratchpad", + "repoUrl": "https://github.com/adikpb/opencode-scratchpad", + "tagline": "A private per-project scratchpad you can capture and edit without leaving the TUI", + "description": "One plain-Markdown scratchpad per project, keyed by absolute path. Append a line with `/scratch ` or open a modal editor with `/scratch`; the session sidebar shows a collapsible, read-only preview that refreshes on save. Notes live under `$OPENCODE_DATA_DIR/scratchpad` and are never written into your repo.", + "kind": "plugin", + "topics": [ + "workflow", + "ui" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "scratchpad", + "notes", + "tui" + ] + }, + { + "productId": "opencode-seatbelt", + "type": "plugins", + "displayName": "OpenCode Seatbelt", + "repoUrl": "https://github.com/ssmirr/opencode-seatbelt", + "npmPackage": "opencode-seatbelt", + "tagline": "macOS kernel sandbox that blocks agents from reading secrets via .ocignore", + "description": "Applies a macOS Seatbelt profile to the OpenCode process the moment the plugin loads, so every tool and child process (read, glob, grep, the shell, MCP servers, custom tools) is confined by the kernel. Patterns from .ocignore plus a built-in secret baseline are compiled to syscall-level rules instead of being matched against command text, so \"tail\" instead of \"cat\", symlinks, hardlinks, base64 and interpreters are all covered, and rename/unlink of protected files is blocked too. Requires macOS and OpenCode v2.", + "kind": "plugin", + "topics": [ + "security" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "security", + "sandbox", + "macos", + "secrets" + ], + "installation": "Install from npm:\n\n```sh\nopencode plugin add opencode-seatbelt\n```\n\nOr add it to `opencode.json(c)` yourself:\n\n```jsonc\n{\n \"$schema\": \"https://opencode.ai/config.json\",\n \"plugins\": [\"opencode-seatbelt\"]\n}\n```\n", + "minVersion": "2.0.0" + }, + { + "productId": "opencode-secret-scrubber", + "type": "plugins", + "displayName": "Secret Scrubber", + "repoUrl": "https://github.com/sureshr-dev/opencode-secret-redactor", + "tagline": "Scrub secrets from the outbound LLM prompt before it reaches the provider", + "description": "Redacts secrets from the whole outbound prompt (system, messages, tool calls, and tool results) at the V2 session hooks, so the model and provider never see them. Two detection layers - known-value matching from environment variables and an optional secrets file, plus a vendored high-signal Gitleaks pattern set. Includes local logging and sub-millisecond overhead per call.", + "kind": "plugin", + "topics": [ + "security" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-secrets-env", + "type": "plugins", + "displayName": "Secrets Env", + "repoUrl": "https://github.com/bytesnail/opencode-secrets-env", + "npmPackage": "opencode-secrets-env", + "tagline": "Inject secrets from a dotenv file into process.env, hot-reload, reconnect MCP servers", + "description": "Loads secrets from ~/.config/opencode/secrets.env (dotenv format) into process.env at startup, so MCP servers ({env:NAME} references), other plugins, and OpenCode's own provider-key discovery can use them — keeping keys out of opencode.json(c) and your config safe to commit. Watches the file and hot-reloads changes in about a second, then reconnects only the MCP servers that reference a changed variable. Works with both OpenCode V1 (opencode-ai >= 1.14.34) and V2 (@opencode/cli).", + "kind": "plugin", + "topics": [ + "security", + "environment" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "secrets", + "environment", + "mcp" + ], + "homepageUrl": "https://www.npmjs.com/package/opencode-secrets-env", + "minVersion": "1.14.34" + }, + { + "productId": "opencode-serpapi", + "type": "plugins", + "displayName": "opencode-serpapi", + "repoUrl": "https://github.com/serpapi/opencode-serpapi", + "tagline": "Real-time web search for OpenCode via the SerpApi API", + "description": "Adds a native serpapi_search tool to OpenCode, giving it real-time access to Google, Amazon, YouTube, and 100+ other search engines through SerpApi, without manual MCP configuration.", + "kind": "plugin", + "topics": [ + "web" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-session-cost", + "type": "plugins", + "displayName": "OpenCode Session Cost", + "repoUrl": "https://github.com/igorvelho/opencode-session-cost", + "tagline": "Sidebar block showing true session cost including all subagents", + "description": "Subagent costs hide from you by default in OpenCode's session cost display.\nThis TUI plugin adds a sidebar block showing your true total — the active\nsession plus every subagent (task) it spawned — and lets you expand it to\nsee the cost of each one individually. Works for every session regardless\nof model or provider, no configuration required.", + "kind": "plugin", + "topics": [ + "cost", + "ui" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "cost", + "session", + "subagent", + "tui", + "sidebar" + ], + "minVersion": "1.18.0" + }, + { + "productId": "opencode-session-time", + "type": "plugins", + "displayName": "Session Time", + "repoUrl": "https://github.com/LazyGatto/opencode-session-time", + "tagline": "Session start / last answer timestamps and a clock", + "description": "Adds a wall clock to the prompt footer, a \"Session\" block to the sidebar with the session start time and the time of the last model answer, and a /time timeline panel with every turn's timing.", + "kind": "plugin", + "topics": [ + "sessions", + "ui" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-session-tools", + "type": "plugins", + "displayName": "opencode-session-tools", + "repoUrl": "https://github.com/kernel-oops/opencode-session-tools", + "tagline": "OpenCode v2 session tools – session metadata, history recall, and Claude Code-style messaging between sessions", + "description": "Two plugins for OpenCode v2, built on the public v2 plugin API. opencode-meta adds opencode_meta (bounded session metadata, relations, statistics and tool usage) and send_message, which lets one session send plain text to another by ID or title; the target receives it as a queued message marked as coming from a peer, never as user approval. opencode-recall-lite adds recall and recall_get to search and read back earlier sessions across projects, with a short reminder to check history before answering questions about past work.", + "kind": "plugin", + "topics": [ + "sessions", + "memory" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "sessions", + "recall", + "messaging", + "multi-agent" + ], + "installation": "Add it to the `plugins` list in your OpenCode v2 `opencode.json`; OpenCode installs it from npm:\n\n```json\n{ \"plugins\": [{ \"package\": \"@kerneloops/opencode-session-tools\" }] }\n```\n\nOr copy both plugin directories into your OpenCode v2 config's `plugins/` directory:\n\n```sh\ngit clone https://github.com/kernel-oops/opencode-session-tools\ncp -r opencode-session-tools/plugins/opencode-meta opencode-session-tools/plugins/opencode-recall-lite ~/.config/opencode/plugins/\n```\n", + "minVersion": "2.0.0" + }, + { + "productId": "opencode-session-tracker", + "type": "plugins", + "displayName": "OpenCode Session Tracker", + "repoUrl": "https://github.com/ykocaman/opencode-session-tracker", + "tagline": "TUI sidebar extension and Telegram integration to track active sessions/subagents and interact remotely.", + "description": "A lightweight, robust TUI sidebar extension and interactive Telegram Integration for OpenCode that brings real-time session tracking, multi-process routing, and remote monitoring directly to your terminal and phone. Monitor and drive your terminal agents remotely from your mobile device, answer interactive questions, approve or deny commands, and track status streams.", + "kind": "plugin", + "topics": [ + "sessions", + "remote", + "ui" + ], + "compat": "v2", "scope": [ "global" ], @@ -1257,11 +3963,54 @@ "repoUrl": "https://github.com/malhashemi/opencode-sessions", "tagline": "Session management", "description": "Session management plugin for OpenCode with multi-agent collaboration support.", + "kind": "plugin", + "topics": [ + "sessions" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "opencode-shell-magazine", + "type": "plugins", + "displayName": "Shell Magazine", + "repoUrl": "https://github.com/aiev/opencode-shell-magazine", + "tagline": "Real-time shell command monitor in the TUI sidebar", + "description": "Sidebar panel that tracks every shell command in real time. Reads the host shell registry and session.shell.* events for true status (running/exited/timeout/killed, exit code, PID, elapsed time), tails background output, backfills history from session messages, and offers kill, copy, open-output, and finish notifications. Multi-TUI safe through the host's atomic storage.", + "kind": "plugin", + "topics": [ + "ui", + "environment", + "observability" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-shield-bash", + "type": "plugins", + "displayName": "opencode-shield-bash", + "repoUrl": "https://github.com/acramsay/opencode-shield-bash", + "npmPackage": "@acramsay/opencode-shield-bash", + "tagline": "Gate bash calls through an LLM judge subagent session to allow or deny their execution", + "description": "Gate every bash tool call through a second judge session. The judge applies a fixed policy covering destructive file operations, disk/device writes, piping remote output to interpreters, privilege escalation, reverse shells, secret exfiltration, resource bombs, and system-wide installs, and returns an allow/deny verdict before the command runs. Denials surface the reason to the calling agent; verdicts are cached per root session.", + "kind": "plugin", + "topics": [ + "security" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [], + "homepageUrl": "https://www.npmjs.com/package/@acramsay/opencode-shield-bash" + }, { "productId": "opencode-short-term-memory", "type": "plugins", @@ -1269,11 +4018,60 @@ "repoUrl": "https://github.com/andrejtonev/opencode-short-term-memory", "tagline": "Maintain user instructions and preferences throughout long sessions. No more repeating yourself.", "description": "Automatically summarizes conversation context into structured session memory and injects it back into the system prompt every few turns — preserving user instructions, project context, decisions, and active references across long chats and compactions.", + "kind": "plugin", + "topics": [ + "memory", + "prompting" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "opencode-shortcuts", + "type": "plugins", + "displayName": "opencode-shortcuts", + "repoUrl": "https://github.com/PrismKitty/opencode-shortcuts", + "tagline": "A keyboard shortcut cheatsheet and rebinder for the OpenCode v1 and v2 TUI", + "description": "Press ctrl+/ to see every key you can use in the screen you're on, including your overrides. Rebind any built-in command in place, with clash handling and comment-preserving config edits. OpenCode v1 and v2.", + "kind": "plugin", + "topics": [ + "ui" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-sidebar-usage", + "type": "plugins", + "displayName": "Sidebar Usage", + "repoUrl": "https://github.com/HunkYuan/opencode-sidebar-usage", + "tagline": "TUI sidebar showing per-turn and session-cumulative token usage, cache hit rate, and cost", + "description": "Adds a collapsible \"Usage\" block to the opencode TUI sidebar showing token\nbreakdown (input, output, reasoning, cache read, cache write), cache hit\npercentage, context window usage, and session cost. Updates reactively as\nnew assistant messages arrive.", + "kind": "plugin", + "topics": [ + "cost", + "context", + "ui" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "sidebar", + "tokens", + "tui", + "cost", + "cache" + ], + "minVersion": "1.17.9" + }, { "productId": "opencode-simple-notify", "type": "plugins", @@ -1281,6 +4079,29 @@ "repoUrl": "https://github.com/Yusuzhan/opencode-simple-notify", "tagline": "Native desktop notifications with near-zero dependencies", "description": "Lightweight desktop notification plugin for OpenCode. Sends native OS notifications via dbus (Linux) and osascript (macOS) when sessions complete, error, need approval, or wait for input. Shows project name, elapsed time, and message preview.", + "kind": "plugin", + "topics": [ + "notifications" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-skills-tui", + "type": "plugins", + "displayName": "opencode-skills-tui", + "repoUrl": "https://github.com/aihaipeng/opencode-skills-tui", + "tagline": "Browse skills, track loaded state, and preview SKILL.md", + "description": "OpenCode V2 skills sidebar with loaded-state tracking, SKILL.md previews, token estimates, and skill mentions in prompts.", + "kind": "plugin", + "topics": [ + "ui", + "prompting" + ], + "compat": "v2", "scope": [ "global" ], @@ -1293,6 +4114,12 @@ "repoUrl": "https://github.com/VincentHardouin/opencode-snip", "tagline": "OpenCode plugin that prefixes shell commands with snip to reduce LLM token consumption by 60-90%", "description": "Automatically prefixes supported shell commands (git, go, cargo, npm, docker, etc.) with snip to filter output before it reaches your LLM context window.", + "kind": "plugin", + "topics": [ + "context", + "environment" + ], + "compat": "v1", "scope": [ "global" ], @@ -1305,18 +4132,98 @@ "repoUrl": "https://github.com/JosXa/opencode-snippets", "tagline": "Instant inline text expansion", "description": "Instant inline text expansion for OpenCode. Type #snippet anywhere in your message and watch it transform. Brings DRY principles to prompt engineering with composable, shell-enabled snippets.", + "kind": "plugin", + "topics": [ + "prompting", + "ui" + ], + "compat": "v2", "scope": [ "global" ], "tags": [] }, + { + "productId": "opencode-speak-tts", + "type": "plugins", + "displayName": "Speak TTS", + "repoUrl": "https://github.com/fahrim/opencode-speak-tts", + "tagline": "Free neural voices, no API key", + "description": "Reads OpenCode answers aloud on Windows using Microsoft's free Edge neural voices. Condenses long answers through the model you already have connected, and falls back to the built-in Windows voice when Edge is unreachable.", + "kind": "plugin", + "topics": [ + "voice" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-stats-pills", + "type": "plugins", + "displayName": "OpenCode Stats Pills", + "repoUrl": "https://github.com/Henry-916/opencode-stats-pills", + "tagline": "Inline TUI stats bar for generation speed, tokens, cache hits, cost, and context usage", + "description": "A compact stats bar under the OpenCode V2 input box showing streamed output speed (tok/s), average TTFT, token usage with cache hits and reasoning, session cost, and context-window usage, without opening the sidebar. Click any pill for a detail panel. Context usage follows OpenCode's own calculation, custom per-model prices are supported, and parent and subagent sessions are tracked separately. Tested on OpenCode 2.0.29; UI text is currently in Chinese.", + "kind": "plugin", + "topics": [ + "context", + "cost", + "ui" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "tui", + "tokens", + "cost", + "statistics" + ] + }, + { + "productId": "opencode-status-popup", + "type": "plugins", + "displayName": "Opencode Status Popup", + "repoUrl": "https://github.com/LucasInstra/opencode-status-popup", + "npmPackage": "opencode-status-popup", + "tagline": "Always-on-top status pill or tray icon that shows what the agent is doing (Windows)", + "description": "A second screen for your agent. While a session is thinking, a small always-on-top pill types the word out letter by letter, or a tray icon draws the letter o pixel by pixel. It turns amber on provider retries, red when an execution fails, and violet when OpenCode is waiting for a permission, so you can be in another window and still notice. One PowerShell host starts on demand and is shared by every instance, and the renderer can be switched at runtime with the /popup-* commands or a tool.", + "kind": "plugin", + "topics": [ + "notifications", + "ui" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "windows", + "notifications", + "status", + "tray" + ], + "installation": "opencode plugin add opencode-status-popup", + "minVersion": "2.0.0" + }, { "productId": "opencode-swarm", "type": "plugins", "displayName": "OpenCode Swarm", - "repoUrl": "https://github.com/zaxbysauce/opencode-swarm", + "repoUrl": "https://github.com/ZaxbyHub/opencode-swarm", "tagline": "Verification-gated swarm with architect, review, test, and security agents", "description": "Verification-gated OpenCode swarm with architect planning, independent review, test engineering, security checks, and resumable evidence.", + "kind": "plugin", + "topics": [ + "orchestration", + "code-quality" + ], + "compat": "v2", "scope": [ "global" ], @@ -1329,6 +4236,11 @@ "repoUrl": "https://github.com/iHildy/opencode-synced", "tagline": "Sync configs across machines", "description": "Enables syncing global opencode configurations across machines with public/private visibility options.", + "kind": "plugin", + "topics": [ + "environment" + ], + "compat": "v2", "scope": [ "global" ], @@ -1341,18 +4253,87 @@ "repoUrl": "https://github.com/tlinhart/opencode-system-prompt-logger", "tagline": "System prompt logger", "description": "OpenCode plugin that intercepts the system prompt before it's sent to the LLM and logs it.", + "kind": "plugin", + "topics": [ + "observability", + "prompting" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "opencode-tasksmd", + "type": "plugins", + "displayName": "OpenCode TasksMD", + "repoUrl": "https://github.com/LeonardMeagher2/tasksmd", + "npmPackage": "@leonardmeagher2/opencode-tasksmd", + "tagline": "Background task queue for OpenCode projects, powered by TASKS.md", + "description": "Background task queue that reads TASKS.md — schedules recurring work, sets per-task permissions and agents, and persists state across restarts.", + "kind": "plugin", + "topics": [ + "orchestration", + "workflow" + ], + "compat": "v1", + "scope": [ + "global", + "project" + ], + "tags": [ + "tasks", + "scheduling", + "background", + "queue", + "automation" + ], + "homepageUrl": "https://www.npmjs.com/package/@leonardmeagher2/opencode-tasksmd", + "installation": "Add the package to your OpenCode config:\n\n```json\n{\n \"plugin\": [\"@leonardmeagher2/opencode-tasksmd\"]\n}\n```\n" + }, + { + "productId": "opencode-teamwork", + "type": "plugins", + "displayName": "OpenCode Teamwork", + "repoUrl": "https://github.com/sorcnr/opencode-teamwork-v2", + "npmPackage": "opencode-teamwork-v2", + "tagline": "Antigravity-style multi-agent orchestration with verification loops", + "description": "Brings the Antigravity-style Teamwork orchestration model to OpenCode V2, where a Sentinel coordinator dispatches a DAG of specialist agents and a verifier gates every task until it passes. Ships 10 agents (Sentinel, Orchestrator, Crafter, Scout, Worker, Proof Worker, Proposer, Falsifier, Synthesizer, Verifier), 7 slash commands, per-agent git worktrees, cost tracking, and a 9-step prompt-crafting wizard.", + "kind": "plugin", + "topics": [ + "orchestration", + "workflow" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "agents", + "multi-agent", + "orchestration", + "worktrees", + "verification", + "commands" + ], + "homepageUrl": "https://www.npmjs.com/package/opencode-teamwork-v2", + "installation": "Install the plugin and choose a model for each agent:\n\n```sh\nopencode plugin add opencode-teamwork-v2\nnpx opencode-teamwork-v2 init\n```\n\nOr install straight from GitHub: `opencode plugin add github:sorcnr/opencode-teamwork-v2`\n", + "minVersion": "2.0.0" + }, { "productId": "opencode-telemetry", "type": "plugins", "displayName": "Opencode Telemetry", - "repoUrl": "https://github.com/agostinilabsrl/opencode-telemetry", + "repoUrl": "https://github.com/xrmghost-maintainer/opencode-telemetry", "tagline": "Passive cross-session telemetry to local SQLite; cost rollups across agent orchestration chains", "description": "Logs every opencode session to a local SQLite database automatically — tokens, tool calls, skills, per-turn cost. Aggregates costs across orchestration chains (conductor + child sessions), offers turn-by-turn forensic inspection, and ships an `octm` CLI for reports without spending model tokens. Zero cloud, zero network, no message bodies stored.", + "kind": "plugin", + "topics": [ + "observability", + "cost" + ], + "compat": "v1", "scope": [ "global" ], @@ -1365,6 +4346,34 @@ "orchestration" ] }, + { + "productId": "opencode-tg", + "type": "plugins", + "displayName": "opencode-tg", + "repoUrl": "https://github.com/par4987/opencode-tg", + "tagline": "Control OpenCode from Telegram — every session gets its own thread", + "description": "Runs inside the OpenCode server as a plugin (zero runtime dependencies) and mirrors every session into a Telegram chat: each session and subagent gets its own thread, and writing in the thread is prompting the agent. Answer the agent's questions and approve permissions with a tap, run shell commands in the session (a three-tier guard passes read-only commands, asks for confirmation on service-breaking ones, and blocks the irreversible), browse and attach project files, schedule tasks, switch models and agents, watch CI runs, and steer the message queue mid-turn. Optional extras: multi-bot topologies (one bot per project or per session), local whisper.cpp voice transcription, and a dead-prompt watchdog that reports the real cause when a turn never starts.", + "kind": "plugin", + "topics": [ + "remote", + "notifications" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "telegram", + "notifications", + "mobile", + "i18n", + "voice" + ], + "homepageUrl": "https://github.com/par4987/opencode-tg#readme", + "installation": "Register the plugin in your OpenCode config (`opencode.jsonc`) pointing at the directory:\n\n```jsonc\n\"plugins\": [\n { \"package\": \"C:/path/to/opencode-tg\" }\n]\n```\n\nCreate `~/.opencode/tg/.env` (never committed to the repo):\n\n```\nTELEGRAM_BOT_TOKEN=123456:ABC...\nALLOWED_USERS=123456789\n```\n\nStart in `dry` mode to validate without touching Telegram, then switch `mode` to `live` in the plugin's `config.json`. The interface ships in 12 languages (Spanish, English, Portuguese, German, French, Italian, Indonesian, Russian, Turkish, Chinese, Korean, Arabic) switchable from the phone with `/locale`. Tested against OpenCode 2.0.15–2.0.22.\n", + "minVersion": "2.0.15" + }, { "productId": "opencode-throughput", "type": "plugins", @@ -1372,6 +4381,57 @@ "repoUrl": "https://github.com/Howardzhangdqs/opencode-throughput", "tagline": "Real-time LLM performance monitoring", "description": "Real-time LLM performance monitoring plugin for OpenCode. Tracks TTFT, TPS, latency, token usage, and cost per model with toast notifications and a TUI sidebar display.", + "kind": "plugin", + "topics": [ + "observability" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-todo-supervisor", + "type": "plugins", + "displayName": "OpenCode Todo Supervisor", + "repoUrl": "https://github.com/N0K0/opencode-todo-supervisor", + "npmPackage": "@hacky.software/opencode-todo-supervisor", + "tagline": "Session todo lists, plus a supervisor that keeps nudging idle sessions until the list is done", + "description": "Gives every OpenCode V2 session a real todo list and then keeps the agent working on it. Ships todo_write, todo_read, todo_add and todo_remove tools (V2 ships none), stored per session with stable per-item ids, with a live progress strip in the composer. A supervisor re-prompts any session that goes idle while its list still has open items, and stays quiet while the agent is actually working, including during tool calls, subagent runs and background shells. Any markdown file can be subscribed so its GFM checklists count as todos, and the TUI panel can tick them off by hand. Nudges are delivered as synthetic session input, so the model reads them as ordinary instructions. Tested against 2.0.24.", + "kind": "plugin", + "topics": [ + "workflow", + "ui" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "todo", + "task-tracking", + "productivity", + "automation", + "tui" + ], + "installation": "## Install\n\n```sh\nopencode plugin add @hacky.software/opencode-todo-supervisor\n```\n\nOr list it in `opencode.json`:\n\n```json\n{\n \"$schema\": \"https://opencode.ai/config.json\",\n \"plugins\": [\"@hacky.software/opencode-todo-supervisor\"]\n}\n```\n\n## Configuration\n\nOptions are optional; the defaults supervise quietly in the background.\n\n```jsonc\n{\n \"$schema\": \"https://opencode.ai/config.json\",\n \"plugins\": [\n {\n \"package\": \"@hacky.software/opencode-todo-supervisor\",\n \"options\": {\n \"stallMinutes\": 5, // idle time before the first nudge\n \"minNudgeIntervalMs\": 45000, // rate limit between nudges\n \"maxNoProgressNudges\": 5, // give up after this many no-progress nudges\n \"injectTodoContext\": true, // remind the model of the list on each prompt\n \"markdownFiles\": [\"PLAN.md\"] // treat these files' checklists as the todo list\n }\n }\n ]\n}\n```\n\n## Usage\n\nAsk the agent to plan with `todo_write`, then check `todo_read`. In the TUI the composer\nstrip shows progress; open the panel from the command palette to add, remove or reorder\nitems, and to check off markdown checklist items.\n", + "minVersion": "2.0.0" + }, + { + "productId": "opencode-todolist", + "type": "plugins", + "displayName": "Todolist", + "repoUrl": "https://github.com/aiev/opencode-todolist", + "tagline": "Restores todowrite/todoread with a sidebar todo strip", + "description": "Brings back the V1 session todo tools as a server plugin. Lists are stored per session and a compact summary of open tasks is injected into the model context on every request, so the agent keeps track across long conversations and context compaction.", + "kind": "plugin", + "topics": [ + "workflow", + "ui" + ], + "compat": "v2", "scope": [ "global" ], @@ -1384,11 +4444,74 @@ "repoUrl": "https://github.com/eserete/opencode-token-tracker", "tagline": "Real-time token usage, cost, and latency tracking for every AI request in OpenCode", "description": "Displays a toast after each AI response with input/output tokens, cache hits, reasoning tokens, response latency, per-message cost, cumulative session cost, model identifier, and request count. Automatically aggregates tokens from subagent sessions spawned via the Task tool. Zero config — drop the file in and it works.", + "kind": "plugin", + "topics": [ + "cost", + "observability" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "opencode-topics", + "type": "plugins", + "displayName": "OpenCode Topics", + "repoUrl": "https://github.com/m-uvex/opencode-topics", + "tagline": "Smart, zero-token session re-titling that tracks topic drift", + "description": "Tracks topic drift across conversation turns and dynamically re-titles OpenCode sessions when the topic shifts, using zero-token local checks between assistant turns.", + "kind": "plugin", + "topics": [ + "sessions" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-trace", + "type": "plugins", + "displayName": "opencode-trace", + "repoUrl": "https://github.com/aixmoyu/opencode-trace", + "tagline": "Automatic tracing, visualization, and replay for OpenCode AI conversations with token and latency metrics", + "description": "A comprehensive tool suite that automatically records every interaction between OpenCode and AI Providers (OpenAI, Anthropic), including complete request/response payloads, token usage, and latency metrics. Features a real-time Web Viewer for conversation history and statistics, per-session tracing control via slash commands and agent tools, CLI for export/query, and support for both global and project-level storage.", + "kind": "plugin", + "topics": [ + "observability", + "sessions" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-trace-ljw1004", + "type": "plugins", + "displayName": "opencode-trace", + "repoUrl": "https://github.com/ljw1004/opencode-trace", + "tagline": "Capture raw json LLM requests+responses as jsonl traces, with interactive HTML viewer", + "description": "OpenCode plugin that logs raw provider request and response payloads to ~/opencode-trace as self-contained HTML files with an interactive viewer for debugging and inspection.", + "kind": "plugin", + "topics": [ + "observability" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "tracing", + "debugging", + "observability" + ], + "installation": "Add `\"@ljw1004/opencode-trace\"` to the `plugin` array in `~/.config/opencode/opencode.json`.\n" + }, { "productId": "opencode-tts", "type": "plugins", @@ -1396,6 +4519,11 @@ "repoUrl": "https://github.com/StefanoChiodino/opencode-tts", "tagline": "Voice summaries for idle responses", "description": "Speaks assistant responses aloud when a session goes idle, with summary or full-text modes and local TTS backends.", + "kind": "plugin", + "topics": [ + "voice" + ], + "compat": "v1", "scope": [ "global" ], @@ -1408,6 +4536,30 @@ "repoUrl": "https://github.com/tim-hilde/opencode-update-notifier", "tagline": "Notify about plugin updates.", "description": "Checks if your pinned plugins have newer versions available and shows a notification.", + "kind": "plugin", + "topics": [ + "notifications" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-usage-bar", + "type": "plugins", + "displayName": "Opencode Usage Bar", + "repoUrl": "https://github.com/satas20/opencode-usage-bar", + "tagline": "Lightweight, configurable usage gauge with provider status alerts for the OpenCode TUI.", + "description": "A minimal usage bar that shows how much of your coding-plan quota you've used and how long until it resets, in a full-width row below the session footer. Supports Claude Pro/Max and ChatGPT Plus/Pro (Codex), each toggleable per window (5h session, 7d weekly, per-model) via a simple TOML config, so you show only the bars you care about. Color-coded mini-bars escalate green/amber/red with usage, countdowns tick live, and last known values are cached so the bar appears instantly on restart. It also watches each vendor's public status page and prepends a color-coded \"!\" marker when there's an active incident — so you know it's them, not you. No slash commands, no sidebar, no token bookkeeping, just a lightweight always-visible gauge. Credentials are read-only from the vendors' own CLI logins or OpenCode's auth store. Installable via npm (@satas/opencode-usage-bar).", + "kind": "plugin", + "topics": [ + "cost", + "providers", + "ui" + ], + "compat": "v2", "scope": [ "global" ], @@ -1420,11 +4572,57 @@ "repoUrl": "https://github.com/Mark1708/opencode-usage-monitor", "tagline": "Monitor OpenAI and Z.AI usage quotas in the TUI", "description": "OpenCode sidebar plugin that displays API usage quotas for OpenAI and Z.AI providers with per-model breakdowns, spend tracking, and configurable refresh controls.", + "kind": "plugin", + "topics": [ + "cost", + "ui" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "opencode-vision", + "type": "plugins", + "displayName": "OpenCode Vision", + "repoUrl": "https://github.com/venespana/opencode-vision", + "tagline": "Give text-only OpenCode models the ability to see images", + "description": "Intercepts images pasted into chat, routes them through a configurable vision backend (an MCP server or a local CLI like MiniMax mmx), and injects the resulting text description back into the conversation so non-vision models can reason about images. Ships no vision of its own — you provide the backend, it provides the wiring.", + "kind": "plugin", + "topics": [ + "media" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-vision-kelphect", + "type": "plugins", + "displayName": "Vision", + "repoUrl": "https://github.com/KelpHect/opencode-vision", + "tagline": "Screen recording and video analysis tools (record_screen, watch_video, video_frames)", + "description": "Gives OpenCode agents eyes: record the full screen or a single window with ffmpeg, send clips to a video-capable model for timestamped Q&A, or turn videos into timestamped contact sheets for image-only vision models. Windows-focused, with a bundled video-analysis skill.", + "kind": "plugin", + "topics": [ + "media" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "vision", + "tools" + ], + "installation": "```bash\nopencode plugin add github:KelpHect/opencode-vision\n```\nRequires `ffmpeg` and `ffprobe` on PATH. Pin a release with\n`github:KelpHect/opencode-vision#v0.2.1`.\n", + "minVersion": "2.0.0" + }, { "productId": "opencode-visualizer", "type": "plugins", @@ -1432,6 +4630,47 @@ "repoUrl": "https://github.com/psinetron/opencode-visualiser", "tagline": "2D pixel-art office for AI agents", "description": "Turning raw OpenCode terminal logs into cozy 2D pixel office chaos. Watch your agents work, idle, and celebrate success in a bustling virtual office.", + "kind": "plugin", + "topics": [ + "ui", + "orchestration" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-vitals", + "type": "plugins", + "displayName": "OpenCode Vitals", + "repoUrl": "https://github.com/moutazideal/opencode-vitals", + "tagline": "Turns, steps and streaming tok/s in a small always-on-top bar", + "description": "A desktop bar for the session you are working in - turns, steps, and average streaming tokens per second, measured as generated tokens over active stream time so tool waiting stays out of the denominator. One-command install with no configuration file edit and no network calls; standard-library Python only, built for OpenCode V2.", + "kind": "plugin", + "topics": [ + "observability", + "ui" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-web-voice-plugin", + "type": "plugins", + "displayName": "OpenCode Web Voice Plugin", + "repoUrl": "https://github.com/Flickwire-Agent/opencode-web-voice-plugin", + "tagline": "Voice input for OpenCode Web through Lens", + "description": "Adds a microphone button to the OpenCode Web prompt composer using the Web Speech API. Record speech, insert transcripts directly into the prompt editor, and send naturally. Requires Lens to load.", + "kind": "plugin", + "topics": [ + "voice" + ], + "compat": "v2", "scope": [ "global" ], @@ -1443,12 +4682,43 @@ "displayName": "OpenCode Workaholic", "repoUrl": "https://github.com/RoderickQiu/opencode-workaholic", "tagline": "Enforce mandatory working time and prevents premature \"done\" responses", - "description": "- AI has an early-exit problem: it says \"done\" at 30 seconds while edge cases are untested, bugs remain, and docs are missing. \n- Workaholic enforces mandatory working time for AI until the timer hits zero.\n- Blocks premature \"done\" responses until timer expire, and require AI to call checkout() to end the task.\n", + "description": "- AI has an early-exit problem: it says \"done\" at 30 seconds while edge cases are untested, bugs remain, and docs are missing. \n- Workaholic enforces mandatory working time for AI until the timer hits zero.\n- Blocks premature \"done\" responses until timer expire, and require AI to call checkout() to end the task.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "opencode-workflows", + "type": "plugins", + "displayName": "opencode-workflows", + "repoUrl": "https://github.com/rphang/opencode-workflows", + "npmPackage": "@rphang/opencode-workflows", + "tagline": "Claude Code-style dynamic workflows for opencode v2 — a JS script fans work out to parallel subagents", + "description": "A native opencode v2 plugin that reproduces Claude Code's dynamic workflows. The model writes a small JavaScript orchestration script (agent, parallel, pipeline, phase, budget, nested workflows) that runs in a sandboxed interpreter in the background, fans work out to subagents as child sessions, and can resume from its journal. Includes a live TUI tree to watch, steer, or stop running agents. Uses your configured opencode models; no extra daemon.", + "kind": "plugin", + "topics": [ + "orchestration", + "workflow", + "prompting" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "workflows", + "subagents", + "orchestration" + ], + "installation": "```sh\nopencode plugin add @rphang/opencode-workflows\n```\n", + "minVersion": "2.0.15" + }, { "productId": "opencode-workspace", "type": "plugins", @@ -1456,6 +4726,11 @@ "repoUrl": "https://github.com/kdcokenny/opencode-workspace", "tagline": "Multi-agent orchestration", "description": "Bundled multi-agent orchestration harness with 16 components in one install.", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v1", "scope": [ "global" ], @@ -1468,6 +4743,96 @@ "repoUrl": "https://github.com/kdcokenny/opencode-worktree", "tagline": "Zero-friction git worktrees", "description": "Zero-friction git worktrees for OpenCode. Auto-spawns terminals, syncs files, cleans up on exit.", + "kind": "plugin", + "topics": [ + "git" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-worktrees", + "type": "plugins", + "displayName": "Worktrees", + "repoUrl": "https://github.com/KelpHect/opencode-worktrees", + "tagline": "Run subagents in isolated git worktrees so parallel editors never collide", + "description": "Selected agents (default `worker`) each get their own git worktree branched from the default branch, with file copies via .worktreeinclude, automatic cleanup of unchanged worktrees, and enforcement against edits to the main checkout. Includes a bundled worktree-isolation skill.", + "kind": "plugin", + "topics": [ + "git", + "orchestration" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "worktrees", + "agents", + "orchestration" + ], + "installation": "```bash\nopencode plugin add github:KelpHect/opencode-worktrees\n```\nRequires `git`. Pin a release with\n`github:KelpHect/opencode-worktrees#v0.2.2`.\n", + "minVersion": "2.0.0" + }, + { + "productId": "opencode-zellij-indicator", + "type": "plugins", + "displayName": "OpenCode Zellij Indicator", + "repoUrl": "https://github.com/aidan-gallagher/opencode-zellij-indicator", + "tagline": "Show each OpenCode session's status and title on its Zellij tab", + "description": "Puts a status icon (working, needs-you, done-unseen, done-seen) and the session title on each Zellij tab, so you can see at a glance which of your parallel OpenCode agents is busy, blocked on a prompt, or finished — without switching tabs. Includes an optional stopwatch and sound notifications.", + "kind": "plugin", + "topics": [ + "environment", + "notifications" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "zellij", + "terminal", + "status", + "notifications", + "tabs" + ] + }, + { + "productId": "opencode2-shell-tasks", + "type": "plugins", + "displayName": "OpenCode 2 Shell Tasks", + "repoUrl": "https://github.com/madcpt/opencode2-shell-tasks", + "tagline": "Claude Code-style background shell jobs for OpenCode 2 (V2 plugin API)", + "description": "Run long commands without blocking the current turn: detached processes that return a task ID immediately, combined stdout/stderr logs with bounded tails, exit-code reconciliation after a restart, process-group kill, and a native /tasks TUI panel. Built on the OpenCode 2 V2 plugin API.", + "kind": "plugin", + "topics": [ + "environment", + "orchestration" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencodemirror", + "type": "plugins", + "displayName": "OpenCodeMirror", + "repoUrl": "https://github.com/iceberghbs/OpenCodeMirror", + "tagline": "Bridge OpenCode sessions to chat platforms from your phone", + "description": "Native OpenCode plugin that mirrors session output to Telegram and lets you approve permissions, answer questions, and send prompts from chat. Runs inside the OpenCode process with no separate server.", + "kind": "plugin", + "topics": [ + "remote", + "sessions" + ], + "compat": "v1", "scope": [ "global" ], @@ -1480,6 +4845,11 @@ "repoUrl": "https://github.com/open-hax/codex", "tagline": "OAuth authentication", "description": "OAuth authentication plugin for personal coding assistance with ChatGPT Plus/Pro subscriptions.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v1", "scope": [ "global" ], @@ -1492,6 +4862,11 @@ "repoUrl": "https://github.com/numman-ali/openskills", "tagline": "Alternative skills manager", "description": "Alternative skills management plugin for opencode with enhanced features.", + "kind": "plugin", + "topics": [ + "prompting" + ], + "compat": "unknown", "scope": [ "global" ], @@ -1504,6 +4879,11 @@ "repoUrl": "https://github.com/Lyapsus/opencode-optimal-model-temps", "tagline": "Optimal sampling temperatures", "description": "Minimal plugin that nudges specific models to their preferred sampling temperature.", + "kind": "plugin", + "topics": [ + "providers" + ], + "compat": "v1", "scope": [ "global" ], @@ -1516,6 +4896,12 @@ "repoUrl": "https://github.com/useorgx/orgx-opencode-plugin", "tagline": "OrgX Work Graph peer for task dispatch, receipts, deviations, and passive reconciliation", "description": "OrgX OpenCode Plugin connects OpenCode sessions to the OrgX execution control plane. It receives OrgX task dispatches, drives the user's local OpenCode session, posts execution receipts and deviations back to OrgX, and writes compact Work Graph events for later audit-first reconciliation.", + "kind": "plugin", + "topics": [ + "orchestration", + "integrations" + ], + "compat": "v1", "scope": [ "global" ], @@ -1535,6 +4921,29 @@ "repoUrl": "https://github.com/athal7/opencode-pilot", "tagline": "Automation daemon", "description": "Automation daemon that polls for work from GitHub issues and Linear tickets.", + "kind": "plugin", + "topics": [ + "integrations", + "workflow" + ], + "compat": "unknown", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "plain", + "type": "plugins", + "displayName": "Plain", + "repoUrl": "https://github.com/rubenxyz/opencode-plain-english", + "tagline": "Plain-English replies: everyday words, no jargon, no code in explanations", + "description": "Puts the assistant into plain-English mode. While active, a short ruleset is injected into the system prompt so it explains its work in everyday words and full sentences, with no jargon or acronyms and no code in explanations. On by default in every session; /plain toggles it, with /plain-commit and /plain-review commands for commits and diffs. Small, dependency-free, inspired by caveman - inverted.", + "kind": "plugin", + "topics": [ + "prompting" + ], + "compat": "v2", "scope": [ "global" ], @@ -1547,6 +4956,12 @@ "repoUrl": "https://github.com/backnotprop/plannotator", "tagline": "Interactive plan review UI", "description": "Plan review UI with visual annotation, private/offline sharing, and Obsidian/Bear integration.", + "kind": "plugin", + "topics": [ + "workflow", + "ui" + ], + "compat": "v1", "scope": [ "global" ], @@ -1559,6 +4974,11 @@ "repoUrl": "https://github.com/zenobi-us/opencode-plugin-template", "tagline": "CICD setup for plugins", "description": "Focuses on providing the CICD setup with generator script, release please, bun publish, npm trusted publishing, and mise tasks.", + "kind": "plugin", + "topics": [ + "docs" + ], + "compat": "v1", "scope": [ "global" ], @@ -1571,6 +4991,11 @@ "repoUrl": "https://github.com/spoons-and-mirrors/pocket-universe", "tagline": "A subagent driven pocket universe for your primary agent", "description": "Async agents can be powerful, but orchestration is at best finicky; they fire and forget, orphan work, lose context, waste time... and tokens. This plugin extends the native opencode subagent paradigm to provide closed loop, resilient, async agents, blocking main thread execution. A \"pocket universe\". This ships with three tools creating a robust system for parallel subagents to communicate and coordinate work", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v1", "scope": [ "global" ], @@ -1580,9 +5005,32 @@ "productId": "ralph-wiggum", "type": "plugins", "displayName": "Ralph Wiggum", - "repoUrl": "https://github.com/Th0rgal/opencode-ralph-wiggum", + "repoUrl": "https://github.com/Th0rgal/open-ralph-wiggum", "tagline": "Self-correcting agent loops", "description": "Iterative AI development loops with self-correcting agents based on the Ralph Wiggum technique.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "unknown", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "rehydra", + "type": "plugins", + "displayName": "Rehydra", + "repoUrl": "https://github.com/rehydra-ai/rehydra-sdk", + "tagline": "Prevent your coding agent from leaking secrets to LLM providers", + "description": "Intercepts the conversation between OpenCode and the LLM, replacing secrets from .env files and detected API keys, tokens, and credentials with placeholders before they leave your machine. Secrets are transparently restored before any tool executes locally. Supports pattern-based detection for Stripe, OpenAI, AWS, GitHub, Slack, and more.", + "kind": "plugin", + "topics": [ + "providers", + "security" + ], + "compat": "v2", "scope": [ "global" ], @@ -1595,6 +5043,12 @@ "repoUrl": "https://gist.github.com/ahosker/267f375a65378bcb9a867fd9a195db1e", "tagline": "Simple terminal bell plugin", "description": "A simple plugin to ring the terminal bell once a request is complete.", + "kind": "plugin", + "topics": [ + "notifications", + "environment" + ], + "compat": "v1", "scope": [ "global" ], @@ -1607,6 +5061,12 @@ "repoUrl": "https://github.com/JensGrote/opencode-semantic-anchors", "tagline": "Runtime contract enforcement for safe, traceable AI agents", "description": "Runtime steering plugin that enforces behavioral contracts via plugin hooks. Monitors chat messages and tool calls against configurable rules, supports BLOCK/WARN modes, built-in profiles (socratic, architecture), step confirmation intervals, override mechanism, dynamic role switching, and Zod-validated YAML configuration.", + "kind": "plugin", + "topics": [ + "code-quality", + "observability" + ], + "compat": "v1", "scope": [ "global" ], @@ -1619,6 +5079,11 @@ "repoUrl": "https://github.com/JRedeker/opencode-shell-strategy", "tagline": "Avoid interactive shell hangs", "description": "Instructions file that teaches LLMs how to avoid interactive shell commands that hang in non-TTY environments.", + "kind": "plugin", + "topics": [ + "environment" + ], + "compat": "unknown", "scope": [ "global" ], @@ -1628,9 +5093,15 @@ "productId": "simple-memory", "type": "plugins", "displayName": "Simple Memory", - "repoUrl": "https://github.com/cnicolov/opencode-plugin-simple-memory", + "repoUrl": "https://github.com/ApplauseLab/opencode-plugin-simple-memory", "tagline": "Git-based memory", "description": "Simple plugin to manage memory inside a git repo that can be committed and reviewed by team members.", + "kind": "plugin", + "topics": [ + "memory", + "git" + ], + "compat": "v2", "scope": [ "global" ], @@ -1643,6 +5114,11 @@ "repoUrl": "https://github.com/Tarquinen/opencode-smart-title", "tagline": "Auto-generate session titles", "description": "Auto-generates meaningful session titles using AI.", + "kind": "plugin", + "topics": [ + "sessions" + ], + "compat": "v1", "scope": [ "global" ], @@ -1655,6 +5131,110 @@ "repoUrl": "https://github.com/MasuRii/opencode-smart-voice-notify", "tagline": "Intelligent voice notifications", "description": "Smart voice notification plugin with multiple TTS engines (ElevenLabs, Edge TTS, SAPI) and intelligent reminder system.", + "kind": "plugin", + "topics": [ + "notifications", + "voice" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "solo-memory", + "type": "plugins", + "displayName": "Solo Memory", + "repoUrl": "https://github.com/baaai123/solo-memory", + "tagline": "Transparent long-term memory — auto weave/ingest, no agent discipline required", + "description": "A transparent long-term memory plugin for OpenCode. The chat.message hook auto-injects memory context before every turn, and the event hook auto-stores user+assistant pairs after replies — the agent never needs to remember to call memory tools. Local-first (SQLite + ChromaDB, zero cloud), bilingual (Chinese via BM25/jieba, English via semantic bge-large-en-v1.5), with a gap-detection → crawl → synthesize → verify learning loop and 7 MCP tools.", + "kind": "plugin", + "topics": [ + "memory", + "workflow" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "sortie-dogs", + "type": "plugins", + "displayName": "Sortie-dogs", + "repoUrl": "https://github.com/zufall-upon/Sortie-dogs", + "tagline": "Agents write only the files they declared — manifest-gated orchestration loop", + "description": "An opt-in OpenCode orchestration plugin. Every task starts with an explicit write manifest; edits and handoffs outside that scope are rejected. Three bounded scouts investigate read-only, a dedicated worker implements, and canonical validation plus risk-based review gate coordinator-owned completion. Dormant until you run /sortie — ordinary OpenCode sessions are untouched.", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "sourcepier", + "type": "plugins", + "displayName": "SourcePier", + "repoUrl": "https://github.com/happyeric77/sourcepier", + "tagline": "Persistent project documents across OpenCode sessions", + "description": "Manage project-scoped Markdown documents in the OpenCode v2 native TUI. Import, search, edit, and export Sources across sessions, while agents can discover and read them through read-only tools.", + "kind": "plugin", + "topics": [ + "memory", + "docs" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "spritecook-mcp", + "type": "plugins", + "displayName": "SpriteCook MCP", + "repoUrl": "https://github.com/SpriteCook/opencode-plugin", + "tagline": "Generate 2D game assets from OpenCode with SpriteCook", + "description": "Connect OpenCode to SpriteCook to generate game assets with AI, including sprites, pixel art, icons, tilesets, characters, and animations.", + "kind": "plugin", + "also": [ + "mcp-server" + ], + "topics": [ + "media" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "mcp", + "game-assets", + "pixel-art", + "sprites", + "image-generation", + "game-dev" + ], + "homepageUrl": "https://spritecook.ai" + }, + { + "productId": "stay-awake", + "type": "plugins", + "displayName": "Stay Awake", + "repoUrl": "https://github.com/AuroraAeon/opencode-stay-awake", + "tagline": "Keep the computer awake only while a session is generating", + "description": "Long agent runs (model streaming, tool execution, compaction, rate-limit retries) routinely take minutes with no user input, and default OS power settings treat that as idle and suspend mid-prompt. This plugin holds a system sleep inhibitor for exactly as long as any session is generating, then releases it — caffeinate -dims -w on macOS, systemd-inhibit on Linux, no-op elsewhere. Busy detection is event-driven rather than polling, so a tool call that runs for minutes keeps its work item open instead of being released mid-run. Every inhibitor is bound to the server pid and a stale cap bounds any lost end event, so the machine can never be wedged awake. Zero dependencies, MIT.", + "kind": "plugin", + "topics": [ + "environment" + ], + "compat": "v2", "scope": [ "global" ], @@ -1667,6 +5247,28 @@ "repoUrl": "https://github.com/spoons-and-mirrors/subtask2", "tagline": "Orchestration system", "description": "Extend opencode /commands into a powerful orchestration system with granular flow control.", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "superpowers", + "type": "plugins", + "displayName": "Superpowers", + "repoUrl": "https://github.com/obra/superpowers", + "tagline": "Complete software development methodology with composable skills for coding agents", + "description": "Gives your coding agent a structured methodology - brainstorm specs, write plans, run TDD, dispatch subagents, and review work. Skills trigger automatically across Claude Code, OpenCode, Codex, Gemini CLI, Cursor, and GitHub Copilot CLI.", + "kind": "plugin", + "topics": [ + "workflow" + ], + "compat": "v2", "scope": [ "global" ], @@ -1676,14 +5278,60 @@ "productId": "swarm-plugin", "type": "plugins", "displayName": "Swarm Plugin", - "repoUrl": "https://github.com/joelhooks/opencode-swarm-plugin", + "repoUrl": "https://github.com/joelhooks/swarm-tools", "tagline": "Swarm intelligence", "description": "Swarm plugin for opencode enabling swarm-based agent coordination.", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v2", "scope": [ "global" ], "tags": [] }, + { + "productId": "telemetry-dev-opencode", + "type": "plugins", + "displayName": "@telemetry-dev/opencode", + "repoUrl": "https://github.com/telemetry-dev/telemetry", + "tagline": "OpenTelemetry traces for OpenCode agent turns, model calls, and tools", + "description": "Records OpenCode agent turns, model calls, tool executions, and session events with OpenTelemetry for telemetry.dev. Available as the @telemetry-dev/opencode npm package; source and setup instructions are in packages/opencode of the linked SDK repository.", + "kind": "plugin", + "topics": [ + "observability" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "telepathy", + "type": "plugins", + "displayName": "telepathy", + "repoUrl": "https://github.com/Winterrks/telepathy", + "tagline": "OpenCode sessions message Claude Code, Codex, Gemini CLI and other agent sessions on the same machine", + "description": "Adds telepathy_list_peers, telepathy_send_message and telepathy_read_messages as native OpenCode tools, so an OpenCode session can find and message the Claude Code, Codex, Gemini CLI, Copilot CLI, Cursor and other agent sessions running on the same machine. The plugin runs inside OpenCode and starts a turn in an idle session when a message arrives, so agents can coordinate without polling. Everything stays local (messages are JSON files in ~/.telepathy, with no network calls and no telemetry). MIT licensed.", + "kind": "plugin", + "topics": [ + "orchestration" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [ + "multi-agent", + "messaging", + "claude-code", + "codex", + "local" + ], + "installation": "Add telepathy to the `plugin` list in `~/.config/opencode/opencode.json`:\n\n```json\n{ \"plugin\": [\"telepathy@git+https://github.com/Winterrks/telepathy.git\"] }\n```\n\nRequires Node.js 20 or newer. OpenCode 1.x only. Install telepathy in the other agents too (see the repository README).\n" + }, { "productId": "token-monitor", "type": "plugins", @@ -1691,6 +5339,12 @@ "repoUrl": "https://github.com/Ainsley0917/opencode-token-monitor", "tagline": "Token analysis & cost tracking with budgets, trends, and per-project analytics", "description": "Track token usage (input/output/reasoning/cache), estimate costs, view daily trends with ASCII charts, set budget alerts, and export data. Supports per-agent breakdown, agent×model cross-analysis, and project-scoped analytics.", + "kind": "plugin", + "topics": [ + "cost", + "observability" + ], + "compat": "v1", "scope": [ "global" ], @@ -1703,6 +5357,11 @@ "repoUrl": "https://github.com/ramtinJ95/opencode-tokenscope", "tagline": "Token analysis & cost tracking", "description": "Tokenscope, Comprehensive token usage analysis and cost tracking for opencode sessions.", + "kind": "plugin", + "topics": [ + "cost" + ], + "compat": "v1", "scope": [ "global" ], @@ -1715,6 +5374,30 @@ "repoUrl": "https://github.com/mmynsted/opencode-toon-config-plugin", "tagline": "Loads TOON based, AGENTS.toon rather than Markdown", "description": "Use TOON based agent instructions. Command to analyize and improve agent instructions.", + "kind": "plugin", + "topics": [ + "prompting", + "context" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "topic-compaction", + "type": "plugins", + "displayName": "Topic Compaction", + "repoUrl": "https://github.com/lhaarman/opencode-topic-compaction", + "tagline": "Appends late-position overrides to compaction prompts for topic-based session summarization.", + "description": "This plugin improves session compaction continuity by restructuring how opencode summarizes file activity. Instead of a single linear stream that can lose track of pending work, the plugin clusters actual file activity into thematic topics during compaction. Each topic carries an explicit `blocked:` status field, and open blockers are guaranteed to survive across successive compaction cycles, ensuring unresolved work persists through session restarts.", + "kind": "plugin", + "topics": [ + "context", + "sessions" + ], + "compat": "v2", "scope": [ "global" ], @@ -1724,9 +5407,15 @@ "productId": "tree-sitter-language-pack", "type": "plugins", "displayName": "Tree-sitter Language Pack", - "repoUrl": "https://github.com/xberg-io/plugins", + "repoUrl": "https://github.com/xberg-io/tree-sitter-language-pack", + "npmPackage": "@xberg-io/opencode-tree-sitter-language-pack", "tagline": "Code intelligence for 300+ languages", "description": "OpenCode plugin exposing tree-sitter-language-pack tools for parsing and extracting structure, imports, and symbols from 300+ languages.", + "kind": "plugin", + "topics": [ + "code-intel" + ], + "compat": "v2", "scope": [ "global", "project" @@ -1746,7 +5435,12 @@ "displayName": "TypeUI", "repoUrl": "https://github.com/bergside/typeui", "tagline": "Design systems, UI prompts, and layout variation guidance", - "description": "Open-source design layer for OpenCode that provides curated design skills, UI prompts, and layout variation guidance so agents can generate more consistent interfaces. Includes an OpenCode setup guide.", + "description": "Open-source design layer for OpenCode that provides curated design skills, UI prompts, and layout variation guidance so agents can generate more consistent interfaces. Includes an OpenCode setup guide (linked as Docs).", + "kind": "plugin", + "topics": [ + "prompting" + ], + "compat": "v1", "scope": [ "global" ], @@ -1758,8 +5452,15 @@ "type": "plugins", "displayName": "ul-opencode-event", "repoUrl": "https://gitee.com/ulthon/ul-opencode-event", + "npmPackage": "@ulthon/ul-opencode-event", "tagline": "Multi-channel notifications (SMTP, DingTalk, Feishu) and token usage analytics", - "description": "Get notified when OpenCode sessions complete, error, or need your attention - via SMTP email, DingTalk robot, or Feishu robot.\n- Multi-channel: SMTP, DingTalk, Feishu, local JSONL file\n- Multi-level token analytics: message / session / total / project scopes\n- 74+ template variables with i18n support (zh/en)\n- Global + project config merge, automatic DB preload for crash recovery\n- Built-in CLI test tool\n", + "description": "Get notified when OpenCode sessions complete, error, or need your attention - via SMTP email, DingTalk robot, or Feishu robot.\n- Multi-channel: SMTP, DingTalk, Feishu, local JSONL file\n- Multi-level token analytics: message / session / total / project scopes\n- 74+ template variables with i18n support (zh/en)\n- Global + project config merge, automatic DB preload for crash recovery\n- Built-in CLI test tool", + "kind": "plugin", + "topics": [ + "notifications", + "cost" + ], + "compat": "v1", "scope": [ "global" ], @@ -1773,6 +5474,32 @@ ], "homepageUrl": "https://www.npmjs.com/package/@ulthon/ul-opencode-event" }, + { + "productId": "unforgit", + "type": "plugins", + "displayName": "Unforgit", + "repoUrl": "https://github.com/MiguelMedeiros/unforgit", + "tagline": "Git-backed repository memory for AI agents", + "description": "Unforgit gives OpenCode and other coding agents durable, repository-scoped memory through MCP. Store and recall project decisions, conventions, gotchas, and playbooks locally in a Git-backed memory base, with optional sync and curation workflows.", + "kind": "plugin", + "topics": [ + "memory", + "git" + ], + "compat": "v2", + "scope": [ + "project" + ], + "tags": [ + "memory", + "mcp", + "agents", + "knowledge-base", + "repository" + ], + "homepageUrl": "https://unforgit.com/docs/mcp", + "installation": "Install the published CLI, then generate OpenCode project instructions and MCP config:\n\n```bash\nnpm install -g unforgit\ncd your-project\nunforgit init --ide opencode\n```\n\nThis writes `AGENTS.md` guidance and `opencode.json` MCP configuration using the `unforgit-mcp` stdio server.\n" + }, { "productId": "unmoji", "type": "plugins", @@ -1780,18 +5507,116 @@ "repoUrl": "https://codeberg.org/bastiangx/opencode-unmoji", "tagline": "Strip emojis from output", "description": "A simple plugin that strips ALL emojis from agent outputs in Opencode.", + "kind": "plugin", + "topics": [ + "ui" + ], + "compat": "unknown", "scope": [ "global" ], "tags": [] }, + { + "productId": "veris-daytona", + "type": "plugins", + "displayName": "Veris for Daytona", + "repoUrl": "https://github.com/veris-ai/veris-daytona", + "npmPackage": "@veris-ai/daytona-opencode", + "tagline": "OpenCode sessions run in a Daytona sandbox whose vendor API calls are answered by Veris twins", + "description": "Every OpenCode session runs in a Daytona sandbox whose calls to Stripe and the rest of your vendor stack are answered by stateful Veris twins, and the agent gets a receipt of what the vendor actually received. Unmodified code, real hostnames, no image to build.", + "kind": "plugin", + "topics": [ + "code-quality", + "security" + ], + "compat": "v1", + "scope": [ + "global", + "project" + ], + "tags": [ + "veris", + "daytona", + "sandbox", + "integration-testing", + "api-mocking", + "testing" + ], + "homepageUrl": "https://github.com/veris-ai/veris-daytona/tree/main/daytona-opencode#readme", + "installation": "## Links\n\n- npm: https://www.npmjs.com/package/@veris-ai/daytona-opencode\n- Source: https://github.com/veris-ai/veris-daytona/tree/main/daytona-opencode\n- Docs: https://github.com/veris-ai/veris-daytona/tree/main/daytona-opencode#readme\n- Veris: https://veris.ai\n\n## Installation\n\nAdd the plugin to `opencode.json`:\n\n```jsonc\n{ \"plugin\": [\"@veris-ai/daytona-opencode\"] }\n```\n\nThen export three keys:\n\n```sh\nexport DAYTONA_API_KEY=... # https://app.daytona.io/dashboard/keys\nexport VERIS_API_KEY=... # https://studio.veris.ai\nexport VERIS_ENVIRONMENT_ID=... # the Veris environment that decides which vendor twins you get\n```\n\nThen run `opencode`. No image to build, no network configuration, nothing to start.\n\n## What the agent gets\n\n- The ten sandbox-backed tools from `@daytona/opencode`: bash, read, write, edit,\n multiedit, ls, glob, grep, getPreviewURL, gitSync.\n- `verisReceipt`, which reports what the twin *received*.\n- The Veris MCP server.\n\nAn empty receipt after a green run means the code never reached its dependency.\nAsk an agent to call the Stripe API and it will report success whether or not it\nmade the call. The transcripts are identical; the receipts are not.\n" + }, + { + "productId": "veris-e2b", + "type": "plugins", + "displayName": "Veris for E2B", + "repoUrl": "https://github.com/veris-ai/veris-e2b", + "npmPackage": "@veris-ai/e2b-opencode", + "tagline": "OpenCode sessions run in an E2B sandbox whose vendor API calls are answered by Veris twins", + "description": "Every OpenCode session runs in an E2B sandbox whose outbound vendor API calls are answered by stateful Veris twins, with a receipt of what the vendor actually received. One line in opencode.json - no template to register, no server to start.", + "kind": "plugin", + "topics": [ + "code-quality", + "security" + ], + "compat": "v1", + "scope": [ + "global", + "project" + ], + "tags": [ + "veris", + "e2b", + "sandbox", + "integration-testing", + "api-mocking", + "testing" + ], + "homepageUrl": "https://github.com/veris-ai/veris-e2b/tree/main/e2b-opencode#readme", + "installation": "## Links\n\n- npm: https://www.npmjs.com/package/@veris-ai/e2b-opencode\n- Source: https://github.com/veris-ai/veris-e2b/tree/main/e2b-opencode\n- Docs: https://github.com/veris-ai/veris-e2b/tree/main/e2b-opencode#readme\n- Veris: https://veris.ai\n\n## Installation\n\nAdd the plugin to `opencode.json`:\n\n```jsonc\n{ \"plugin\": [\"@veris-ai/e2b-opencode\"] }\n```\n\nThen export three keys:\n\n```sh\nexport E2B_API_KEY=... # https://e2b.dev/dashboard\nexport VERIS_API_KEY=... # https://app.veris.ai\nexport VERIS_ENVIRONMENT_ID=... # the Veris environment that decides which vendor twins you get\n```\n\nThen run `opencode`. No image to build, no template to register, no server to start,\nno URL to copy.\n\n## What the agent gets\n\nEight sandbox-backed replacements for OpenCode's built-in tools (bash, read, write,\nedit, multiedit, ls, glob, grep), plus three additions:\n\n- `verisReceipt`: what the twin *received*, the tool that separates a real\n integration from a plausible-looking one.\n- `gitSync`: commit in the sandbox and pull into the local `opencode/N` branch,\n returning only once the changes are on your machine.\n- `getPreviewURL`: the public URL for a port inside the sandbox.\n\nAn empty receipt after a green run means the code never reached its dependency.\n" + }, + { + "productId": "veris-sim", + "type": "plugins", + "displayName": "Veris Sim", + "repoUrl": "https://github.com/veris-ai/plugins", + "npmPackage": "@veris-ai/veris-sim-opencode", + "tagline": "Three engineer-invoked commands that test an application against Veris twins of its services", + "description": "Three engineer-invoked commands that test an application against Veris twins of the services it calls. setup wires a repository once. build measures every vendor claim the task rests on before designing, then proves the change through veris-proxy. fix reproduces the failure before touching source and proves it closed. Ships the veris MCP server.", + "kind": "plugin", + "topics": [ + "code-quality", + "security" + ], + "compat": "v2", + "scope": [ + "global", + "project" + ], + "tags": [ + "veris", + "integration-testing", + "sandbox", + "mcp", + "testing", + "commands" + ], + "homepageUrl": "https://github.com/veris-ai/plugins#readme", + "installation": "## Links\n\n- npm: https://www.npmjs.com/package/@veris-ai/veris-sim-opencode\n- Source: https://github.com/veris-ai/plugins/tree/main/veris-sim\n- Docs: https://github.com/veris-ai/plugins#readme\n- Veris: https://veris.ai\n\n## Installation\n\n```sh\nopencode plugin @veris-ai/veris-sim-opencode -g\n```\n\nEquivalently, add `\"@veris-ai/veris-sim-opencode\"` to the `plugin` array in\n`~/.config/opencode/opencode.json`. Then export your credential and restart\nopencode:\n\n```sh\nexport VERIS_API_KEY=... # https://app.veris.ai\n```\n\n`VERIS_API_BASE` overrides the control plane (it defaults to\n`https://svc.api.veris.ai`). Until the key is set, `opencode mcp list` shows the\n`veris` server as failed; the commands still run, and `setup` walks you through it.\n\n## Commands\n\n| command | what it does |\n|---|---|\n| `/veris-sim:setup` | wires the repository to a Veris environment, once: credential, environment, transport, one smoke run with proof of arrival |\n| `/veris-sim:build ` | measures every vendor claim the task rests on against the twin before designing, proves the change through veris-proxy with a receipt |\n| `/veris-sim:fix ` | reproduces the failure the issue describes before designing, proves the same failure closed with a receipt |\n\nThe three are plain OpenCode commands: only the engineer starts them, the model\ncannot invoke them on its own. The same three are also registered as skills.\n" + }, { "productId": "vibe-coding-slack-notifier", "type": "plugins", "displayName": "Vibe Coding Slack Notifier", - "repoUrl": "https://github.com/Wangmerlyn/vibe-coding-slack-notifier", + "repoUrl": "https://github.com/Wangmerlyn/coding-agent-notifier", "tagline": "Slack DM alerts for OpenCode task completion", "description": "OpenCode-compatible Slack notifier plugin and toolkit for Codex, OpenCode, Claude Code, and Gemini workflows.", + "kind": "plugin", + "topics": [ + "notifications", + "remote" + ], + "compat": "v1", "scope": [ "global" ], @@ -1804,6 +5629,12 @@ "repoUrl": "https://github.com/angristan/opencode-wakatime", "tagline": "WakaTime integration", "description": "WakaTime integration plugin for tracking coding activity in opencode sessions.", + "kind": "plugin", + "topics": [ + "observability", + "integrations" + ], + "compat": "v2", "scope": [ "global" ], @@ -1816,6 +5647,11 @@ "repoUrl": "https://github.com/pantheon-org/opencode-warcraft-notifications", "tagline": "Fun sound notifications", "description": "Notification plugin with Warcraft sounds for opencode completion alerts.", + "kind": "plugin", + "topics": [ + "notifications" + ], + "compat": "v1", "scope": [ "global" ], @@ -1828,6 +5664,14 @@ "repoUrl": "https://github.com/boxpositron/with-context-mcp", "tagline": "Project-specific markdown notes", "description": "MCP server for managing project-specific markdown notes with templates, batch edits, and ignore patterns.", + "kind": "plugin", + "also": [ + "mcp-server" + ], + "topics": [ + "memory" + ], + "compat": "unknown", "scope": [ "global" ], @@ -1840,6 +5684,47 @@ "repoUrl": "https://github.com/Edison-A-N/opencode-worktree-memory-sync", "tagline": "Auto-sync memory to git worktrees", "description": "Automatically copies .opencode/memory/ from the main repository into new git worktrees on session init. Detects worktrees via the .git file, resolves the main repo, and syncs memory files only when the destination is empty — so it never overwrites your changes.", + "kind": "plugin", + "topics": [ + "memory", + "git" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "wpm", + "type": "plugins", + "displayName": "WPM", + "repoUrl": "https://github.com/nohavye-dev/wpm-system", + "tagline": "Confidence-weighted persistent memory with proofs", + "description": "Local project memory maintained automatically during work. Every memory carries a 0-1 confidence score that only rises with external proofs; entries are validated or contradicted with evidence, never deleted, and deduplicated. Hybrid semantic + graph retrieval recalls the right memory when it matters.", + "kind": "plugin", + "topics": [ + "memory" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "wsl-notifications", + "type": "plugins", + "displayName": "WSL Notifications", + "repoUrl": "https://github.com/captainmmd1304/opencode-wsl-notifications", + "tagline": "Native Windows toast notifications from WSL", + "description": "Enables OpenCode running inside WSL to send native Windows toast notifications for task completion, prompts, and errors using PowerShell and BurntToast.", + "kind": "plugin", + "topics": [ + "notifications", + "environment" + ], + "compat": "v1", "scope": [ "global" ], @@ -1849,9 +5734,15 @@ "productId": "xberg", "type": "plugins", "displayName": "Xberg", - "repoUrl": "https://github.com/xberg-io/plugins", + "repoUrl": "https://github.com/xberg-io/xberg", + "npmPackage": "@xberg-io/opencode-xberg", "tagline": "Local document extraction for 97+ formats", "description": "OpenCode plugin exposing xberg CLI tools for document extraction, MIME detection, and supported-format discovery.", + "kind": "plugin", + "topics": [ + "media" + ], + "compat": "v2", "scope": [ "global", "project" @@ -1872,6 +5763,15 @@ "repoUrl": "https://github.com/Xquik-dev/x-twitter-scraper", "tagline": "X/Twitter data skill & MCP server", "description": "X/Twitter data skill — MCP server, REST API, 20 extraction tools. Works with Claude Code, Cursor, Codex, and 40+ agents.", + "kind": "plugin", + "also": [ + "mcp-server" + ], + "topics": [ + "web", + "integrations" + ], + "compat": "unknown", "scope": [ "global" ], @@ -1884,6 +5784,29 @@ "repoUrl": "https://github.com/24601/opencode-zellij-namer", "tagline": "Auto-rename Zellij sessions", "description": "Keeps your Zellij session name in sync with your work.", + "kind": "plugin", + "topics": [ + "sessions", + "environment" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "ag-local-bridge", + "type": "projects", + "displayName": "Antigravity Local Bridge", + "repoUrl": "https://github.com/marcodiniz/ag-local-bridge", + "tagline": "Local OpenAI-compatible API bridge for Antigravity", + "description": "An Antigravity extension that exposes a local OpenAI-compatible HTTP server on localhost:11435. Enables any OpenAI-compatible tool (OpenCode, Aider, Cline, Continue.dev) to use Antigravity's Gemini, Claude, and GPT models without additional API keys.", + "kind": "tool", + "topics": [ + "providers" + ], + "compat": "n/a", "scope": [ "global" ], @@ -1896,6 +5819,12 @@ "repoUrl": "https://github.com/saqibameen/agent-dotfiles", "tagline": "Write AI coding rules once, sync to every agent", "description": "Write AI coding rules once, sync to every agent. Supports Command Code, Claude Code, Cursor, Copilot, Codex, and OpenCode.", + "kind": "tool", + "topics": [ + "prompting", + "environment" + ], + "compat": "n/a", "scope": [ "global" ], @@ -1906,8 +5835,14 @@ "type": "projects", "displayName": "agent-harness", "repoUrl": "https://github.com/ar27111994/agent-harness", + "npmPackage": "@ar27111994/agent-harness", "tagline": "Reusable agent asset lifecycle for OpenCode workspaces", "description": "A Node.js CLI for discovering, curating, staging, activating, and wiring reusable AI-agent assets into developer workspaces, including OpenCode.", + "kind": "tool", + "topics": [ + "workflow" + ], + "compat": "n/a", "scope": [ "global" ], @@ -1920,13 +5855,214 @@ ], "homepageUrl": "https://www.npmjs.com/package/@ar27111994/agent-harness" }, + { + "productId": "agent-historian", + "type": "projects", + "displayName": "agent-historian", + "repoUrl": "https://github.com/adlternative/agent-historian", + "tagline": "Search and read past AI coding-agent sessions from the CLI", + "description": "A read-only CLI (ochist) plus an Agent Skill so OpenCode and other agents can search and re-read their own past conversation history before redoing research. Reads transcripts the agents already persist locally — no memory layer, embeddings, index, daemon, or network. Project- or global-scoped, subagent-aware, zero runtime dependencies.", + "kind": "tool", + "topics": [ + "sessions" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "agent-manager", + "type": "projects", + "displayName": "agent-manager", + "repoUrl": "https://github.com/YoanWai/agent-manager", + "tagline": "Terminal UI that runs OpenCode and other coding-agent CLIs side by side in persistent tmux sessions", + "description": "Terminal UI that runs OpenCode alongside Claude Code, Codex and other coding-agent CLIs, each in its own persistent tmux session. It launches the installed OpenCode CLI unmodified, so login, config and MCP servers carry over. One list shows every session's live status, prompts go into a pane without attaching, a session can spawn into its own git worktree, and a full-file diff review sends line comments back to the agent. Runs on macOS, Linux and Windows via WSL2. Apache-2.0.", + "kind": "client", + "topics": [ + "sessions", + "environment" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [], + "homepageUrl": "https://agent-manager.dev/docs/" + }, + { + "productId": "agent-nexus", + "type": "projects", + "displayName": "Agent Nexus", + "repoUrl": "https://github.com/Strategiumfinancepartner/AgentNexus", + "tagline": "Remote MCP registry of 700+ APIs, MCP servers and CLIs, each live-probed so agents pick tools that actually work", + "description": "Remote MCP server and discovery registry for AI agents. Every entry (APIs, MCP servers, CLIs) is continuously probed for liveness, capability and response schema, so an agent can search, compare and pick a tool based on live evidence instead of a README. Agents can also follow an entry and get alerted when it goes down or changes shape. Works with opencode via remote URL (https://agentnexus.app/api/public/mcp, free tier without key) and publishes a ready-to-use config at https://agentnexus.app/.well-known/opencode.", + "kind": "mcp-server", + "topics": [ + "integrations" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, { "productId": "agent-of-empires", "type": "projects", "displayName": "Agent of Empires", - "repoUrl": "https://github.com/njbrake/agent-of-empires", + "repoUrl": "https://github.com/agent-of-empires/agent-of-empires", "tagline": "Multi-session TUI for OpenCode", "description": "A terminal UI for managing multiple OpenCode sessions in tmux with git worktree integration and Docker sandboxing.", + "kind": "client", + "topics": [ + "sessions", + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "agent-qa", + "type": "projects", + "displayName": "Agent QA", + "repoUrl": "https://github.com/vostride/agent-qa", + "tagline": "The self-improving QA agent for software teams", + "description": "Open-source QA harness for authoring and running natural-language web and mobile tests, with persistent memory, self-healing, a dashboard, Agent Skills, and an MCP server. Configure its `agent-qa mcp` command in OpenCode to expose tools for creating, executing, inspecting, triaging, and repairing tests.", + "kind": "mcp-server", + "topics": [ + "code-quality" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "testing", + "qa", + "mcp", + "automation" + ] + }, + { + "productId": "agent-run-inspector", + "type": "projects", + "displayName": "Agent Run Inspector", + "repoUrl": "https://github.com/kaboumou/agent-run-inspector-docs", + "tagline": "Local, read-only reports for OpenCode session exports - repeated tool calls, failures, completion", + "description": "Generates a self-contained HTML (and JSON) report from `opencode export ` data: repeated identical tool calls, recovered vs unresolved failures, completion state, and tool/usage statistics. Python standard library only, no network calls, and the input file is never modified. Tested with OpenCode 1.18.x; other versions are best-effort with an explicit note in the report. The tool itself is a paid download (USD $49 individual / $149 team); the linked repository contains the documentation, screenshots, and a free sample pack of synthetic inputs and example reports.", + "kind": "tool", + "topics": [ + "sessions", + "observability" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "agent-sessions", + "type": "projects", + "displayName": "Agent Sessions", + "repoUrl": "https://github.com/jazzyalex/agent-sessions", + "tagline": "Local OpenCode session-history browser", + "description": "Local-first macOS app for browsing and full-text searching OpenCode session history. It reads local OpenCode SQLite history in read-only mode, opens old runs as readable timelines, and can resume sessions where the OpenCode CLI supports it.", + "kind": "client", + "topics": [ + "sessions" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "session-history", + "transcript-search", + "macos", + "gui", + "sqlite" + ], + "homepageUrl": "https://jazzyalex.github.io/agent-sessions" + }, + { + "productId": "agent-sessions-team", + "type": "projects", + "displayName": "agent-sessions", + "repoUrl": "https://github.com/prajwalgajakesari/agent-sessions", + "tagline": "Share OpenCode, Claude Code and Codex sessions with your team through git", + "description": "Push the current OpenCode session into the repo as a redacted transcript plus a handoff summary under .claude/sessions/, and pull teammates' sessions from any coding agent straight into your chat. Ships as an Agent Skills skill that OpenCode loads from ~/.agents/skills, plus a Claude Code plugin and a CLI on PyPI (agent-sessions-cli).", + "kind": "tool", + "topics": [ + "sessions", + "git" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "agent-teams", + "type": "projects", + "displayName": "Agent Teams AI", + "repoUrl": "https://github.com/777genius/agent-teams-ai", + "tagline": "Multi-team control plane for OpenCode and other coding agents", + "description": "Open-source orchestration platform for autonomous coding-agent teams with first-class OpenCode support. Agents manage Kanban tasks, message each other, review work, and coordinate across teams while users steer with high-level commands. Also supports Codex, Claude Code, Cursor, Grok, GitHub Copilot, Kiro, and other providers.", + "kind": "tool", + "topics": [ + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "multi-agent", + "opencode", + "orchestration", + "kanban", + "code-review" + ], + "homepageUrl": "https://agentteams.live/" + }, + { + "productId": "agent-workbench", + "type": "projects", + "displayName": "Agent Workbench", + "repoUrl": "https://github.com/cvelasquez/agent-workbench", + "tagline": "Local web UI for OpenCode and three other agent CLIs, with one shared history", + "description": "Runs OpenCode through its own opencode serve process, next to Claude Code, Codex and Antigravity CLI, each in a browser tab. Shows OpenCode sessions as conversation cards read from its database in read-only mode, lets you answer its questions and see its permission waits from the UI, hands a conversation over to another CLI and searches across all of them. Never opens auth.json or opencode.json, no telemetry.", + "kind": "client", + "topics": [ + "sessions", + "remote" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "agentbox", + "type": "projects", + "displayName": "AgentBox", + "repoUrl": "https://github.com/madarco/agentbox", + "tagline": "Run multiple coding agents in parallel, each in its own sandboxed VM", + "description": "Run OpenCode, Claude Code, and Codex in parallel — each teleported into its own sandboxed VM (local Docker, self-hosted, or cloud: Hetzner / Daytona / Vercel / E2B / DigitalOcean). Sub-1s checkpoint startup, per-box browser/VS Code/persistent shells, and git credentials stay on the host. MIT.", + "kind": "tool", + "topics": [ + "security", + "orchestration" + ], + "compat": "n/a", "scope": [ "global" ], @@ -1939,6 +6075,45 @@ "repoUrl": "https://github.com/robhunter/agentdeals", "tagline": "MCP server aggregating free tiers, credits, and referral codes across 1,500+ developer tools", "description": "Remote MCP server that surfaces free tiers, credits, trials, and referral codes for developer infrastructure — Railway, Vercel, Fly, OpenAI, Anthropic, and 1,500+ other vendors. Exposes four tools (search_deals, plan_stack, compare_vendors, track_changes) so an agent can find the cheapest way to ship a given stack. Works with opencode via remote URL (https://agentdeals-production.up.railway.app/mcp). Also tracks pricing changes over time.", + "kind": "mcp-server", + "topics": [ + "cost" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "agentfield", + "type": "projects", + "displayName": "AgentField", + "repoUrl": "https://github.com/Agent-Field/agentfield", + "tagline": "Control plane for orchestrating AI agent swarms as microservices — best-in-class DX", + "description": "Open-source infrastructure for orchestrating AI agent swarms at scale. Best-in-class developer experience with SDKs for Python, Go, and TypeScript. Handles async execution, durable state, and observability.", + "kind": "tool", + "topics": [ + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "agentledger", + "type": "projects", + "displayName": "agentledger", + "repoUrl": "https://github.com/garyleelty/agentledger", + "tagline": "Local-first cost ledger — what your coding agents really cost in tokens and money", + "description": "Reads the session logs OpenCode, Claude Code, Codex and Gemini CLI already leave on disk and turns them into token and dollar totals. Prices cache reads and cache writes at their own rates instead of counting them as input, attributes spend by project/branch/model, detects context churn, and projects a budget. Zero dependencies, no network calls — your entire coding history never leaves the machine.", + "kind": "tool", + "topics": [ + "cost" + ], + "compat": "n/a", "scope": [ "global" ], @@ -1951,23 +6126,233 @@ "repoUrl": "https://github.com/luoyuctl/agenttrace", "tagline": "Local TUI for OpenCode session cost, health, and trace reports", "description": "Local-first Bubble Tea TUI and report CLI for inspecting OpenCode and other AI coding-agent logs with cost, tokens, latency, tool failures, anomalies, health gates, diffs, and reports.", + "kind": "client", + "topics": [ + "cost", + "observability" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, { - "productId": "beads", + "productId": "agitrack", "type": "projects", - "displayName": "Beads", - "repoUrl": "https://github.com/steveyegge/beads", - "tagline": "Project task management", - "description": "Steve Yegge's project/task management system for agents (with beads_viewer UI).", + "displayName": "aGiTrack", + "repoUrl": "https://github.com/core-aix/agitrack", + "tagline": "Turns every agent turn into a traceable git commit, with a live dashboard", + "description": "A terminal tool that drives OpenCode (or Claude Code or Codex) and automatically commits each agent turn, recording the prompt, the model, and the token cost alongside the diff, so the AI's work leaves a clean and reviewable git history. Ships with a live web dashboard for browsing commits, sessions, and token spend.", + "kind": "tool", + "topics": [ + "git", + "observability" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "cli", + "git", + "commits", + "tokens", + "dashboard", + "opencode" + ] + }, + { + "productId": "aide", + "type": "projects", + "displayName": "Aide", + "repoUrl": "https://github.com/ragnarwestad/aide", + "tagline": "Spec-driven workflow as opencode skills, with a local dashboard that runs specs across projects", + "description": "Skills (/aide-create, /aide-analyze, /aide-implement, /aide-archive) that write each change as four Markdown files — description, analysis, solution, status — before any code, then implement it test-first. The installer sets the skills up for opencode alongside Claude Code, Codex and GitHub Copilot. A local dashboard queues specs across projects and runs each step headless on the model chosen for it, including opencode's provider/model models, and merges only once the project's tests pass.", + "kind": "skill", + "topics": [ + "workflow" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "aionui", + "type": "projects", + "displayName": "AionUi", + "repoUrl": "https://github.com/iOfficeAI/AionUi", + "tagline": "Free, open-source multi-agent desktop client that gives OpenCode (and other CLIs) a GUI.", + "description": "Cross-platform (macOS/Windows/Linux) desktop app that wraps OpenCode and other agent CLIs in a chat-based GUI. Supports any API key and multiple LLM providers with API-key polling, multi-session and multi-agent workflows, MCP and ACP protocols, file management and preview, code diff view, scheduled tasks, local data storage, and remote WebUI access.", + "kind": "client", + "topics": [ + "ui", + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "gui", + "desktop", + "client", + "multi-agent", + "cross-platform" + ], + "homepageUrl": "https://www.aionui.com" + }, + { + "productId": "argus-framework", + "type": "projects", + "displayName": "Argus", + "repoUrl": "https://github.com/tecnosor/argus-framework", + "tagline": "Banking compliance SDLC framework for AI agents", + "description": "Agent-agnostic framework that installs a complete banking compliance SDLC into any codebase. Deploys 5 specialized agents (Guardian, Compliance, Builder, Tester, Reviewer) to enforce GDPR, DORA, MiCA, PSD2, PCI-DSS and other regulations across the entire software lifecycle.", + "kind": "tool", + "topics": [ + "domain", + "security" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "compliance", + "banking", + "security", + "agents", + "sdlc", + "opencode", + "cursor", + "windsurf", + "cline", + "aider" + ], + "homepageUrl": "https://github.com/tecnosor/argus-framework" + }, + { + "productId": "assay", + "type": "projects", + "displayName": "assay", + "repoUrl": "https://github.com/awss1i/assay", + "tagline": "Deterministic QA that drives every control on a web page and reports where it contradicts itself", + "description": "assay opens a web page in Chromium through Playwright, drives every control it finds, and reports where the page contradicts itself. Runs are deterministic and use no LLM, so the same page gives the same result every time. For opencode you install its skill by copying checking-a-page into .opencode/skills/, and it tells the agent to run assay after it changes a page and report the result. MIT licensed, Python 3.10+, installed from PyPI as assay-ui.", + "kind": "skill", + "topics": [ + "code-quality", + "web" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "ax", + "type": "projects", + "displayName": "ax", + "repoUrl": "https://github.com/Necmttn/ax", + "tagline": "Local telemetry graph for AI coding agents", + "description": "Local-first telemetry and taste graph for AI coding agents. Ingests OpenCode, Claude Code, Codex, Cursor, and Pi session data plus OTLP, then exposes recall, cost, skill/hook usage, churn, and workflow-extraction views through a CLI, dashboard, and MCP server.", + "kind": "mcp-server", + "topics": [ + "observability" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "axi-memory", + "type": "projects", + "displayName": "axi-memory (mem-axi)", + "repoUrl": "https://github.com/masculinecache/axi-memory", + "tagline": "Filesystem + git agent memory CLI with TOON output", + "description": "A bash CLI (@masculinecache/mem-axi) giving terminal coding agents durable cross-session memory stored as markdown + YAML frontmatter in a git repository — no daemon, no database, no lock-in. Adds are structured records (decision, howto, failure, constraint, preference) with confidence and priority, retrieved via ripgrep-backed keyword search over frontmatter; output follows the AXI 10 principles for agent ergonomics (TOON, minimal schemas, definitive empty states, structured errors, exit 0/1/2). Composable with OpenCode sessions as a memory bridge — skill entry points can route capture and recall through the same CLI, and dedicated never-write-secrets handling redacts common secret patterns from stored records.", + "kind": "tool", + "topics": [ + "memory", + "git" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "azdaja", + "type": "projects", + "displayName": "Azdaja", + "repoUrl": "https://github.com/kubet/azdaja", + "tagline": "Local context evaluator for OpenCode with bounded semantic calls and validated results.", + "description": "A Rust binary that keeps source material outside the root prompt, runs exact analysis in a local Python sandbox, and requests bounded semantic judgments through OpenCode when needed.", + "kind": "tool", + "topics": [ + "context" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "cli", + "large-context", + "opencode", + "receipts", + "rust" + ], + "homepageUrl": "https://azdaja.dev" + }, + { + "productId": "beads", + "type": "projects", + "displayName": "Beads", + "repoUrl": "https://github.com/gastownhall/beads", + "tagline": "Project task management", + "description": "Steve Yegge's project/task management system for agents (with beads_viewer UI).", + "kind": "tool", + "topics": [ + "workflow", + "integrations" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "bifrost", + "type": "projects", + "displayName": "Bifrost", + "repoUrl": "https://github.com/maximhq/bifrost", + "tagline": "OpenCode gateway for multi-provider routing", + "description": "Route OpenCode requests through Bifrost's OpenAI-compatible gateway with provider selection, virtual-key controls, and request logging.", + "kind": "tool", + "topics": [ + "providers", + "observability" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "gateway", + "routing", + "provider", + "observability" + ], + "homepageUrl": "https://docs.getbifrost.ai/cli-agents/opencode" + }, { "productId": "brood-box", "type": "projects", @@ -1975,6 +6360,12 @@ "repoUrl": "https://github.com/stacklok/brood-box", "tagline": "Hardware-isolated microVMs for coding agents", "description": "Run AI coding agents (Claude Code, Codex, OpenCode) inside hardware-isolated microVMs with snapshot isolation, egress control, and MCP authorization.", + "kind": "tool", + "topics": [ + "security", + "environment" + ], + "compat": "n/a", "scope": [ "global" ], @@ -1987,11 +6378,203 @@ "repoUrl": "https://github.com/holtwick/bx-mac", "tagline": "macOS file-system sandbox for AI coding agents", "description": "Launch OpenCode, VSCode, Claude Code, or any command in a macOS sandbox (sandbox-exec). Dynamically blocks access to everything except the project directory — no containers, no VMs, just one command.", + "kind": "tool", + "topics": [ + "security" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "call-me", + "type": "projects", + "displayName": "/call-me", + "repoUrl": "https://github.com/radres/call-me", + "tagline": "Let OpenCode ring your iPhone, read you a question and return your spoken answer", + "description": "A hosted remote MCP server for OpenCode. The agent can ring your iPhone, read a question or status update aloud, and get your spoken reply back as text, or send you a text and wait for your answer. Useful when a long session needs a decision while you are away from the keyboard. Needs the /call-me iPhone app, which gives you the number the agent calls.", + "kind": "mcp-server", + "topics": [ + "voice", + "remote", + "notifications" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "mcp", + "phone", + "notifications", + "human-in-the-loop", + "ios" + ], + "homepageUrl": "https://callmemcp.com", + "installation": "Install the /call-me iPhone app and open My Number. Then add the remote MCP server to `opencode.json` (or `~/.config/opencode/opencode.json`):\n```json\n{\n \"mcp\": {\n \"call-me\": {\n \"type\": \"remote\",\n \"url\": \"https://callmemcp.com/mcp\",\n \"enabled\": true\n }\n }\n}\n```\nTell the agent your 10-digit /call-me number, or ask it to call the `setup` tool.\n" + }, + { + "productId": "calyx", + "type": "projects", + "displayName": "Calyx", + "repoUrl": "https://github.com/yuuichieguchi/Calyx", + "tagline": "Native macOS terminal for running and supervising OpenCode and other coding agents in parallel", + "description": "Calyx is an MIT-licensed native macOS terminal built on libghostty. It runs OpenCode alongside Claude Code, Codex, Hermes, Grok, and pi in parallel panes, shows each agent's status and subagents in a sidebar, lets you review diffs and send line comments back to the OpenCode pane, and provides a built-in MCP server for cross-pane messaging.", + "kind": "client", + "topics": [ + "environment", + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "caprock", + "type": "projects", + "displayName": "Caprock", + "repoUrl": "https://github.com/dspv/caprock", + "tagline": "Local dashboard showing OpenCode sessions next to Claude Code and Codex, with cost per repository", + "description": "Reads OpenCode's own database read-only and shows its sessions on the same screens as Claude Code, Codex and DeepSeek Harness, with an all/opencode filter. Costs are shown as OpenCode reports them. Searchable history, single Go binary, no telemetry.", + "kind": "client", + "topics": [ + "cost", + "sessions" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "chronotile", + "type": "projects", + "displayName": "Chronotile", + "repoUrl": "https://github.com/xterr/chronotile", + "tagline": "Local usage analytics dashboard for OpenCode — cost, tokens, models, agents, tools, and sessions", + "description": "Native desktop app (Tauri 2, Rust backend, React UI) that turns OpenCode's local SQLite history into a dashboard — spend, token breakdown including reasoning and cache, per-model, per-agent, per-tool and per-skill analytics, project and file activity, quota burn rate, a full-year spend heatmap, and a session browser with full transcripts. OpenCode records $0 for subscription and OAuth-plan traffic, so Chronotile also estimates cost from models.dev rates and shows reported and estimated figures side by side. Databases are opened read-only, an incremental rollup cache keeps queries instant on multi-gigabyte histories, and no usage data ever leaves your machine.", + "kind": "client", + "topics": [ + "cost", + "observability" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "analytics", + "dashboard", + "desktop", + "cost-tracking", + "token-usage", + "tauri" + ], + "homepageUrl": "https://xterr.github.io/chronotile/" + }, + { + "productId": "claude-learn", + "type": "projects", + "displayName": "Claude Learn", + "repoUrl": "https://github.com/OutcomeFocusAi/claude-learn", + "tagline": "Self-improving behavioral playbook plugin for Claude Code", + "description": "Self-improving behavioral playbook plugin for Claude Code. Captures corrections, failures, and discoveries as scored rules that strengthen or decay over sessions — a closed feedback loop for continuous improvement.", + "kind": "skill", + "topics": [ + "prompting", + "memory" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "claudescope", + "type": "projects", + "displayName": "Claudescope", + "repoUrl": "https://github.com/vladar107/claudescope", + "tagline": "Local, read-only web UI to browse, search, and analyze OpenCode (and other agents') sessions", + "description": "Local-first CLI that serves a web UI to browse, read, search, and analyze AI coding-agent transcripts — OpenCode sessions alongside Claude Code, Codex, Junie, pi, and Copilot CLI. Sessions are merged by working directory; includes DuckDB full-text search and token-cost analytics. Read-only and cross-platform, distributed as a single npm package (MIT).", + "kind": "client", + "topics": [ + "sessions" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "claudex-switch", + "type": "projects", + "displayName": "claudex-switch", + "repoUrl": "https://github.com/Holden-Lin/claudex-switch", + "tagline": "OpenCode V1 Go profiles share session history; experimental V2 profiles isolate credentials and history", + "description": "Source-available CLI for OpenCode V1 Go account aliases and provider-reported quotas. V1 profiles share normal session history; experimental V2 profiles keep credentials and SQLite history per alias. Also supports Claude Code and Codex. Licensed under MIT + Commons Clause v1.0: ordinary work use is allowed, but charging third parties for products or services whose value derives entirely or substantially from this tool requires separate permission.", + "kind": "tool", + "topics": [ + "providers", + "sessions" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "claudexor", + "type": "projects", + "displayName": "Claudexor", + "repoUrl": "https://github.com/razzant/claudexor", + "tagline": "Run OpenCode alongside Claude Code, Codex, and Cursor in one local-first control plane", + "description": "A local-first control plane that runs OpenCode alongside Claude Code, Codex, and Cursor while keeping one Claudexor thread across harness lanes. Adds isolated workspaces, Best-of-N runs, cross-model review, and typed apply gates; quota-aware multi-subscription rotation is available for Claude Code and Codex.", + "kind": "tool", + "topics": [ + "orchestration", + "code-quality" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "orchestration", + "multi-agent", + "local-first", + "code-review", + "opencode" + ], + "homepageUrl": "https://razzant.github.io/claudexor/", + "installation": "npm install -g claudexor\nclaudexor doctor\n" + }, + { + "productId": "clawmetry", + "type": "projects", + "displayName": "ClawMetry", + "repoUrl": "https://github.com/vivekchand/clawmetry", + "tagline": "Zero-config observability dashboard for OpenCode and 20+ agent runtimes", + "description": "Local web dashboard that auto-detects OpenCode session history and shows live sessions, token usage, costs, tool calls, and transcripts alongside 20+ other agent runtimes. One pip install, no configuration.", + "kind": "client", + "topics": [ + "observability" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [], + "homepageUrl": "https://clawmetry.com" + }, { "productId": "cli-proxy-api", "type": "projects", @@ -1999,6 +6582,28 @@ "repoUrl": "https://github.com/router-for-me/CLIProxyAPI", "tagline": "Multi-model proxy", "description": "A proxy server providing compatible API interfaces for multiple model CLIs.", + "kind": "tool", + "topics": [ + "providers" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "cliproxy-rs", + "type": "projects", + "displayName": "cliproxy-rs", + "repoUrl": "https://github.com/vayungodara/cliproxy-rs", + "tagline": "Use your Claude and ChatGPT accounts in OpenCode through one local endpoint, with each account's limits on a dashboard", + "description": "A Rust port of CLIProxyAPI. OpenCode points at it as an OpenAI-compatible custom provider, and it translates to the Anthropic, OpenAI and Gemini APIs while spreading requests across the accounts and API keys you already have. The built-in dashboard shows each Claude and Codex account's 5-hour and weekly limits. Reads CLIProxyAPI's config and auth files. MIT.", + "kind": "tool", + "topics": [ + "providers" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2011,6 +6616,11 @@ "repoUrl": "https://github.com/verseles/codewalk", "tagline": "Native cross-platform Flutter client for OpenCode server mode", "description": "A fast, native Flutter client for OpenCode server mode with realtime streaming chat, speech-to-text on all platforms, multi-server profiles, model selection, and a Material 3 responsive UI for Linux, macOS, Windows, Web, and Android.", + "kind": "client", + "topics": [ + "remote" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2023,11 +6633,41 @@ "repoUrl": "https://github.com/unluckyjori/Codex-Proxy-Server", "tagline": "Local API proxy", "description": "A proxy server that provides a local API proxy for Codex/ChatGPT-like models.", + "kind": "tool", + "topics": [ + "providers" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "cognitive-lead-hq", + "type": "projects", + "displayName": "Cognitive Lead HQ", + "repoUrl": "https://github.com/mokhtarabadi/cognitive-lead-hq", + "tagline": "OpenCode multi-agent HQ with Brain/Hands split, FastMCP and 31 skills", + "description": "Documentation-only OpenCode HQ with Brain/Hands split, 3 FastMCP servers (context/memory/lint), Kanban ZAC workflow and 31 reusable skills.", + "kind": "tool", + "topics": [ + "orchestration", + "workflow" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "multi-agent", + "mcp", + "skills", + "workflow", + "opencode" + ], + "homepageUrl": "https://mokhtarabadi.github.io/cognitive-lead-hq/" + }, { "productId": "comfanion-workflow", "type": "projects", @@ -2035,6 +6675,72 @@ "repoUrl": "https://github.com/Comfanion/workflow", "tagline": "AI-assisted development workflow with agents, skills, and semantic search", "description": "Complete workflow system for AI-assisted development. Includes specialized agents (analyst, PM, architect, developer), reusable skills, slash commands, semantic code search with local vectorizer, and sprint management with Jira integration.", + "kind": "skill", + "topics": [ + "workflow", + "code-intel" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "cortex", + "type": "projects", + "displayName": "Cortex", + "repoUrl": "https://github.com/benogoulart/Cortex", + "tagline": "Codebase intelligence engine for coding agents via MCP", + "description": "Indexes your project into a structured knowledge graph of files, symbols and dependencies using tree-sitter AST parsing, and exposes it to OpenCode over MCP. Includes semantic search, dependency-graph context engine, architecture analysis, persistent project memory, task planning, and specialized agents (architect, reviewer, security, tester) producing unified reports. TypeScript, Node 22+, MIT.", + "kind": "mcp-server", + "topics": [ + "code-intel", + "context" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "cowork-to-code-bridge", + "type": "projects", + "displayName": "cowork-to-code-bridge", + "repoUrl": "https://github.com/abhinaykrupa/cowork-to-code-bridge", + "tagline": "Run agent tasks on your own machine from a sandboxed caller, with no inbound port", + "description": "A local-first async bridge that lets an agent running somewhere else — a cloud sandbox, a container, a hosted chat session, a CI job — execute work on the developer's real machine. There is no network listener, no inbound port and no tunnel: a daemon watches a shared directory, the remote side drops a JSON task file in, and the daemon runs it locally and writes a result file back. Any shared folder works (bind mount, Syncthing, Dropbox, NFS). Execution is allow-listed — only scripts installed into the daemon's scripts directory can run, so a remote caller cannot request arbitrary shell. Tasks are non-blocking and cancellable (SIGTERM to the whole process group, then SIGKILL after a grace period), output is size-capped while streaming with truncation reported, and results carry real exit codes. Ships ~25 scripts (host health, disk, ports, docker ps/logs, git status, package updates), a wrapper that hands a whole task to a local CLI coding agent, and an MCP proxy that relays JSON-RPC to local stdio MCP servers. Python client, stdlib-only, MIT, macOS and Linux.", + "kind": "tool", + "topics": [ + "remote", + "security" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "bridge", + "remote-execution", + "sandbox", + "local-first", + "mcp", + "cli" + ] + }, + { + "productId": "crit", + "type": "projects", + "displayName": "Crit", + "repoUrl": "https://github.com/tomasz-tomczyk/crit", + "tagline": "Review OpenCode plans and diffs in a local browser UI and send comments back to the agent.", + "description": "Crit opens agent plans, code diffs, HTML artifacts and a running dev server in a browser review UI. You leave inline comments and they go back to the agent as structured feedback. Ships an OpenCode plugin (v1 and v2) and skills. Runs locally as a single binary.", + "kind": "client", + "topics": [ + "code-quality" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2047,11 +6753,42 @@ "repoUrl": "https://github.com/eqtylab/cupcake", "tagline": "Policy enforcement layer", "description": "A native policy-layer for AI coding agents built on OPA/Rego with native OpenCode plugin support.", + "kind": "tool", + "topics": [ + "security" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "db-semantic-mcp", + "type": "projects", + "displayName": "db-semantic-mcp", + "repoUrl": "https://github.com/chncaesar/db-semantic-mcp", + "tagline": "Read-only PostgreSQL and SQL Server schema context for OpenCode agents", + "description": "A local MCP server that gives OpenCode agents table and column metadata, database comments, bounded sample data with redaction controls, and optional semantic schema search. Supports PostgreSQL and SQL Server without arbitrary SQL execution or a vector database.", + "kind": "mcp-server", + "topics": [ + "integrations", + "context" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "mcp-server", + "database", + "postgresql", + "sql-server", + "schema" + ], + "installation": "Install with `pip install db-semantic-mcp`, set `DATABASE_URL`, and register the `pg-semantic-mcp` command as a local MCP server in `opencode.jsonc`.\n" + }, { "productId": "deck", "type": "projects", @@ -2059,12 +6796,203 @@ "repoUrl": "https://github.com/cofy-x/deck", "tagline": "Local cockpit for OpenCode-powered autonomous agents with secure sandboxes and live desktop visibility.", "description": "Open-source desktop cockpit that runs OpenCode-integrated agents in isolated Docker sandboxes with chat plus live noVNC desktop monitoring, tool permission controls, and a Pilot bridge suite for orchestrating agents from Telegram, Slack, WhatsApp, and more.", + "kind": "client", + "topics": [ + "security", + "orchestration" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [], "homepageUrl": "https://deck.cofy-x.space" }, + { + "productId": "devintern", + "type": "projects", + "displayName": "DevIntern", + "repoUrl": "https://github.com/getdevintern/devintern", + "tagline": "Turn tracker tickets into OpenCode-authored, self-reviewed pull requests", + "description": "Wires the task tracker your team already uses (Jira, Linear, Trello, Asana, Azure DevOps, GitHub Issues, or plain markdown files) to OpenCode. Running `devintern PROJ-123 --create-pr` picks up the ticket, runs OpenCode non-interactively in your repo, self-reviews the diff, and opens a pull request. A feasibility gate bounces vague tickets back to the tracker with questions instead of producing a confidently wrong PR. An optional unattended mode fully automates ticket handling: scheduled ticket pickup plus webhook-driven handling of PR review comments, so reviewer feedback becomes commits on the same branch. Includes a companion `devpm` tool that turns rough prompts, logs, or Figma frames into well-specified, codebase-grounded tickets. Runs on your machines with your own model keys.", + "kind": "tool", + "topics": [ + "git", + "integrations" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "automation", + "task-tracker", + "pull-requests", + "opencode" + ], + "homepageUrl": "https://devintern.com" + }, + { + "productId": "dialbot-mcp", + "type": "projects", + "displayName": "Dialbot MCP", + "repoUrl": "https://github.com/R2100/dialbot-mcp", + "tagline": "Local MCP browser control for OpenCode with an unpacked Chrome extension", + "description": "Control Chrome tabs from OpenCode through a local stdio MCP server and a Chrome Manifest V3 extension. Includes fast DOM and selector actions, plus visual screenshot, mouse and keyboard control. Also works with Pi and other MCP stdio clients.", + "kind": "mcp-server", + "topics": [ + "web" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "mcp", + "browser-automation", + "chrome", + "windows" + ], + "installation": "Requires Windows, Google Chrome and Node.js 22 or later.\n\n1. Clone https://github.com/R2100/dialbot-mcp to a stable local folder.\n2. Ask OpenCode: \"Install Dialbot MCP from the cloned repository. Run npm run\n setup, add it as a local stdio MCP server to my existing OpenCode config\n without replacing other settings, and tell me to load the Chrome extension\n unpacked from the repository's extension/ folder. Ask before running local\n commands or editing configuration.\"\n3. In Chrome, enable Developer mode at chrome://extensions and choose Load\n unpacked, selecting the repository's extension/ folder.\n4. Open the Dialbot MCP popup and click Connect. Verify with opencode mcp list\n and a browser_tabs tool call.\n" + }, + { + "productId": "djimitflo", + "type": "projects", + "displayName": "djimitflo", + "repoUrl": "https://github.com/djimit/djimitflo", + "tagline": "Djimit Agentic OS control plane with verified OpenCode executor integration", + "description": "A TypeScript monorepo control plane for goal-driven autonomous loops, governance gates, and multi-runtime execution. Includes a verified OpenCode executor runtime, loop lifecycle management, maker/checker/security leases, and a dashboard for tracking goals and loop runs.", + "kind": "tool", + "topics": [ + "orchestration", + "workflow" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "agentic-os", + "control-plane", + "loops", + "governance", + "opencode" + ] + }, + { + "productId": "dotpals", + "type": "projects", + "displayName": "dotpals", + "repoUrl": "https://github.com/Rikinshah787/dotpals", + "tagline": "A desktop pal and notch that shows what your OpenCode sessions did, in plain words", + "description": "An open-source desktop companion that follows OpenCode through an OpenCode plugin and integrates with Claude Code, Codex, Cursor, Gemini CLI, and Copilot CLI through their respective hooks or local logs. Each request becomes a few readable with a live view of the file being edited in a notch at the top of the screen, and flags for .env changes, force-pushes and two agents editing the same file. Runs locally, no telemetry.", + "kind": "client", + "topics": [ + "observability", + "sessions" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "plugin", + "desktop", + "activity", + "monitoring", + "multi-agent" + ], + "installation": "```bash\nnpx --allow-git=all github:rikinshah787/dotpals setup\n```\nThen open the dashboard (`dotpals dashboard`) → **Agents** → **OpenCode** → **Connect**, which adds a small plugin to `~/.config/opencode/plugins/`. Restart OpenCode to load it.\n" + }, + { + "productId": "dsh-movein", + "type": "projects", + "displayName": "dsh-movein", + "repoUrl": "https://github.com/sjh9714/dsh-movein", + "tagline": "Preview and move OpenCode setup into DeepSeek Harness", + "description": "Preview and migrate global and project OpenCode configuration into DeepSeek Harness. Handles JSONC precedence, singular and plural asset directories, inline agents and commands, local and remote MCP servers, disabled entries, and environment placeholders without copying secret values.", + "kind": "tool", + "topics": [ + "environment" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "migration", + "configuration", + "mcp", + "skills" + ] + }, + { + "productId": "dsh-skills-anywhere", + "type": "projects", + "displayName": "dsh-skills-anywhere", + "repoUrl": "https://github.com/noteflowai/dsh-skills-anywhere", + "tagline": "Serve the skills installed for 60+ agents to OpenCode over MCP, zero copies", + "description": "MCP server that reads the Agent Skills (SKILL.md) already installed for OpenCode, Claude Code, Codex, Cursor, Gemini CLI and 60+ other agents, plus Claude Code plugin marketplaces and any GitHub skills repo, and exposes them as find_skills/open_skill tools and skill:// resources without copying or symlinking.", + "kind": "mcp-server", + "topics": [ + "prompting" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "duplex", + "type": "projects", + "displayName": "Duplex", + "repoUrl": "https://github.com/Eric-huang799/duplex", + "tagline": "A browser shared by a human and an AI — same tabs, same live session", + "description": "Electron desktop browser with a bundled stdio MCP bridge (24 tools — snapshot, click, type, screenshot, tabs, annotations) plus an opencode mirror plugin that streams session events into a side panel and injects panel messages back into the same session. Built-in multi-protocol model support (OpenAI / Anthropic / Responses / Gemini) and an Esc takeover for the human.", + "kind": "client", + "topics": [ + "sessions", + "web" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "browser", + "mcp", + "mirror", + "automation", + "electron" + ], + "installation": "## Install the Duplex app\nDownload the installer for Windows / macOS / Linux from the\n[Releases](https://github.com/Eric-huang799/duplex/releases) page (or build from source).\n\n## Install the opencode mirror plugin\n```bash\nmkdir -p ~/.config/opencode/plugins\ncurl -o ~/.config/opencode/plugins/cobrowse-mirror.ts \\\n https://raw.githubusercontent.com/Eric-huang799/duplex/master/integrations/opencode/plugins/cobrowse-mirror.ts\n```\n\n## Register the MCP server\nAdd to `opencode.json` (project-level or global — see `opencode.example.json`):\n```json\n{\n \"mcp\": {\n \"duplex\": {\n \"type\": \"local\",\n \"command\": [\"node\", \"/path/to/duplex/dist-bridge/index.cjs\"],\n \"enabled\": true\n }\n }\n}\n```\n" + }, + { + "productId": "employed", + "type": "projects", + "displayName": "Employed by Guaq AI", + "repoUrl": "https://github.com/Guaq-AI/employed-plugins", + "tagline": "Live job search MCP server and skills for OpenCode, from about 5,000 verified employer ATS boards", + "description": "Remote MCP server plus Agent Skills for searching live job postings read from employers' own applicant-tracking systems, researching an employer's hiring and tracking applications. Signs in with OAuth through opencode mcp auth, so no API key is needed. Every result links to the employer's own apply page.", + "kind": "mcp-server", + "topics": [ + "domain" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "mcp", + "skills", + "jobs" + ], + "homepageUrl": "https://jobs.guaqai.me/connectors", + "installation": "Add the server to `opencode.json`, then run `opencode mcp auth employed` to sign in:\n\n```json\n{\n \"$schema\": \"https://opencode.ai/config.json\",\n \"mcp\": { \"employed\": { \"type\": \"remote\", \"url\": \"https://jobs.guaqai.me/mcp\" } }\n}\n```\n\nFor the job-search skills, copy the repository's `skills/*` into `.agents/skills/`.\n" + }, { "productId": "eval-harness", "type": "projects", @@ -2072,6 +7000,80 @@ "repoUrl": "https://github.com/nano-step/eval-harness", "tagline": "Behavior-regression testing for OpenCode skills", "description": "Detects when an OpenCode skill's behavior drifts from a baseline, attributes the cause across 4 classes (skill change / fixture stale / model change / unknown drift), and emits a 6-field FAIL schema with transcript-span and env-delta evidence. Ships a git pre-push hook, a composite GitHub Action, and a $-cost hard ceiling for CI safety. Bash + jq + python3 stdlib only; no daemon, no SaaS. MIT.", + "kind": "tool", + "topics": [ + "code-quality", + "prompting" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "foreman", + "type": "projects", + "displayName": "Foreman", + "repoUrl": "https://github.com/thruwire/foreman", + "tagline": "Jev-powered agent supervisor for OpenCode workers", + "description": "Runs OpenCode workers through opencode run while TypeSafe AI's Jev independently assesses requirements, implementation completion, tests, progress, and human escalation. Foreman can continue, stop, retry, or launch independent verification workers. The OpenCode backend supports stop/retry interventions.", + "kind": "tool", + "topics": [ + "orchestration", + "code-quality" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "supervision", + "orchestration", + "verification", + "jev" + ], + "homepageUrl": "https://github.com/thruwire/foreman/blob/main/docs/workers.md", + "installation": "Install foreman-core with pipx and make sure the OpenCode CLI is on PATH.\nSet TYPESAFE_API_KEY in the environment or ~/.foreman/.env.\n\n```bash\npipx install foreman-core\nFOREMAN_WORKER_BACKEND=opencode foreman run --repo ./my-project --job \"Add request retries\"\n```" + }, + { + "productId": "forgeo", + "type": "projects", + "displayName": "Forgeo", + "repoUrl": "https://github.com/lucaGazzola/forgeo", + "tagline": "Scheduled software factory that runs your coding agent on a backlog", + "description": "A scheduled, agent-driven software factory for a repository. Keep a plain JSON backlog of tasks and Forgeo runs your configured coding agent (opencode, Claude Code, Codex, or any CLI) on each one, commits the result to the default branch, and runs a refactoring pass when the backlog is empty. Pauses and writes BLOCKER.md when the agent needs a human decision, with a web dashboard for every instance.", + "kind": "tool", + "topics": [ + "orchestration", + "workflow" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "orchestration", + "automation", + "backlog", + "scheduling", + "cli" + ], + "homepageUrl": "https://forgeo.org" + }, + { + "productId": "fractal", + "type": "projects", + "displayName": "fractal", + "repoUrl": "https://github.com/plasma-ai/fractal", + "tagline": "Hierarchical coding-agent loops with recursive delegation and per-node worktrees", + "description": "Supports OpenCode as one of five coding-agent backends. Each node runs in its own Git worktree, delegates separable subtasks recursively, and records state and cost data in a local SQLite database with live terminal controls.", + "kind": "tool", + "topics": [ + "orchestration", + "git" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2084,6 +7086,56 @@ "repoUrl": "https://github.com/gzzhongqi/geminicli2api", "tagline": "Gemini proxy", "description": "A proxy that converts the Gemini CLI tool into OpenAI-compatible endpoints.", + "kind": "tool", + "topics": [ + "providers" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "geneseed", + "type": "projects", + "displayName": "Geneseed", + "repoUrl": "https://github.com/Arylmera/Geneseed", + "npmPackage": "geneseed", + "tagline": "Compiles a disciplined agent harness for OpenCode - laws enforced by plugins at the tool boundary", + "description": "One source renders into a ready-made OpenCode harness - a constitution of laws and doctrines, 18 capability agents, 47 native skills, a memory convention and 7 plugins that hard-block force-pushes, reset --hard and credentials written into tracked files before the tool runs. Install once globally and every repo inherits it; 14 themes change only the voice. Zero runtime dependencies. Also emits for Claude Code, Bob, OpenClaude and plain AGENT.md tools.", + "kind": "tool", + "topics": [ + "workflow" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "harness", + "agents", + "skills", + "plugins", + "guardrails", + "memory" + ], + "homepageUrl": "https://www.npmjs.com/package/geneseed", + "installation": "npx geneseed setup\n# choose \"OpenCode global\" so every repo inherits it\n" + }, + { + "productId": "goblin-dmt", + "type": "projects", + "displayName": "Goblin-D.M.T.", + "repoUrl": "https://github.com/es-3581100/Goblin-D.M.T.", + "tagline": "Model-agnostic OpenCode runtime for bounded exploration, evidence-driven decisions, and user-gated execution.", + "description": "An actor-driven OpenCode control runtime that turns model exploration, branching, uncertainty, and tool use into bounded work with lazy skill routing, persistent state, evidence-driven decisions, verification, checkpointing, and user-gated execution.", + "kind": "agent", + "topics": [ + "workflow" + ], + "compat": "v2", "scope": [ "global" ], @@ -2096,6 +7148,56 @@ "repoUrl": "https://github.com/0xranx/golembot", "tagline": "Unified AI assistant framework for multiple Coding Agent CLIs", "description": "Wraps Claude Code, Cursor, OpenCode, and Codex behind a single API with a Skill system, IM channel adapters (Feishu/Slack/Telegram/Discord), fleet mode, and an interactive onboard wizard.", + "kind": "tool", + "topics": [ + "remote", + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "goodmemory", + "type": "projects", + "displayName": "GoodMemory", + "repoUrl": "https://github.com/hjqcan/GoodMemory", + "tagline": "Local-first, auditable memory for OpenCode through MCP", + "description": "Gives OpenCode durable user and project memory across sessions through a standalone MCP server. Uses SQLite by default, keeps recall inspectable, and makes memory writes opt-in.", + "kind": "mcp-server", + "topics": [ + "memory", + "observability" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "mcp", + "memory", + "local-first", + "opencode", + "ai-agents" + ], + "homepageUrl": "https://github.com/hjqcan/GoodMemory", + "installation": "npm install -g goodmemory@0.7.2\n\nAdd the `mcp.goodmemory` block from the OpenCode setup guide:\nhttps://github.com/hjqcan/GoodMemory/blob/main/docs/GoodMemory-OpenCode-Setup-Guide.md\n" + }, + { + "productId": "growth-architect-foundry", + "type": "projects", + "displayName": "growth-architect-foundry", + "repoUrl": "https://github.com/mohamedOmar11111/growth-architect-foundry", + "tagline": "Ad-agency growth ops skill for OpenCode: audits, client reports, ROAS maths, human-approved live writes", + "description": "Deterministic growth-ops commands for ad agencies (audit, diagnose, EN/AR client reports, COD-aware economics) as an Agent Skill plus AGENTS.md. Live Google/Meta budget or pause changes are enforced in code to need a person typing the campaign key at a terminal, so an agent cannot self-approve. Installs into .agents/skills with one script and is checked against the real OpenCode CLI in CI.", + "kind": "skill", + "topics": [ + "domain" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2108,6 +7210,11 @@ "repoUrl": "https://github.com/cjpais/Handy", "tagline": "Speech to Text", "description": "Easy Open Source Speech to Text.", + "kind": "client", + "topics": [ + "voice" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2120,11 +7227,77 @@ "repoUrl": "https://github.com/aannoo/hcom", "tagline": "Let AI agents message, watch, and spawn each other across terminals", "description": "Claude Code, Gemini CLI, Codex CLI, and OpenCode agents in separate terminals can message each other, detect file edit collisions, read transcripts, view terminal screens, subscribe to activity, and spawn/fork/resume agents. First-class OpenCode support with native plugin. Includes TUI dashboard, cross-device relay, Python API, and multi-agent workflow scripts. pip installable, MIT licensed.", + "kind": "tool", + "topics": [ + "orchestration", + "environment" + ], + "compat": "v2", "scope": [ "global" ], "tags": [] }, + { + "productId": "herdr-reviewr", + "type": "projects", + "displayName": "herdr-reviewr", + "repoUrl": "https://github.com/persiyanov/herdr-reviewr", + "tagline": "Review your coding agent's diff in a terminal pane and send line comments back to OpenCode", + "description": "A terminal code-review pane that runs beside OpenCode in herdr. Read the agent's diff, comment on lines or ranges, and send the comments straight back to the agent's input. Also works with Claude Code, Codex and Pi.", + "kind": "tool", + "topics": [ + "code-quality", + "environment" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "hexis", + "type": "projects", + "displayName": "Hexis", + "repoUrl": "https://github.com/Bevel-Software/Hexis", + "tagline": "Git-backed skills, tools, and context for OpenCode", + "description": "Manages shared agent skills, tool access, and context in Git, then makes approved resources available to OpenCode through a remote OAuth MCP connection.", + "kind": "tool", + "topics": [ + "context", + "git" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "heym", + "type": "projects", + "displayName": "Heym", + "repoUrl": "https://github.com/heymrun/heym", + "tagline": "Visual AI workflows with OpenCode coding agents and Go usage tracking", + "description": "Heym is a source available AI workflow platform you can self host. Its OpenCode Go node runs the OpenCode CLI against GitHub repositories and can return patches or open pull requests. It also provides native OpenCode Go credentials, live model selection, and subscription usage tracking.", + "kind": "client", + "topics": [ + "workflow", + "ui" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "workflows", + "automation", + "coding-agents", + "self-hosted" + ], + "homepageUrl": "https://heym.run/" + }, { "productId": "hipocampo", "type": "projects", @@ -2132,18 +7305,132 @@ "repoUrl": "https://github.com/carrasquelalex1/hipocampo", "tagline": "Dual memory system with BIRE search for AI agents", "description": "A dual-memory system (PostgreSQL + pgvector + Gemini Embeddings) for AI coding agents. Implements the BIRE algorithm (Búsqueda Integrada por Relevancia Expansiva) — unified semantic + lexical search with auto-tagging, hybrid scoring, GIN trigram indexes, and cross-system 768d embeddings. Ships as an opencode skill with SKILL.md, Python scripts, and full DDL schema.", + "kind": "skill", + "topics": [ + "memory" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "hivemind", + "type": "projects", + "displayName": "Hivemind", + "repoUrl": "https://github.com/Hanishchow/hivemind", + "tagline": "Delegate grunt work to headless opencode worker swarms while your main agent plans and reviews", + "description": "Runs opencode as a disposable worker fleet driven by a planning agent. Every worker returns exactly one compact JSON line (result, tokens, cost, duration), so raw agent streams never flood the orchestrator's context. Writing workers each get their own git worktree so parallel edits cannot corrupt each other, and an explicit fallback ladder retries once, then falls back to the orchestrator doing the subtask itself, so a swarm never fails a task a single agent could have finished. Ships scout, coder and tester agent definitions plus slash commands for parallel review panels, research sweeps, batched migrations and partitioned test runs.", + "kind": "tool", + "topics": [ + "orchestration", + "code-quality" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "orchestration", + "multi-agent", + "swarm", + "claude-code", + "automation" + ] + }, + { + "productId": "infiknit", + "type": "projects", + "displayName": "Infiknit", + "repoUrl": "https://github.com/Synthenova/infiknit-mcp", + "tagline": "Local stdio launcher for Infiknit desktop image and video canvas workflows", + "description": "Connect OpenCode to Infiknit on this computer. Generate images and videos into a project or build canvas workflows. Keep Infiknit open. Cloud agents cannot reach it. Official registry io.github.Synthenova/infiknit.", + "kind": "client", + "topics": [ + "media" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [], + "homepageUrl": "https://infiknit.app", + "installation": "Keep Infiknit open, then add a local stdio MCP server:\n\n{\n \"mcp\": {\n \"Infiknit\": {\n \"type\": \"local\",\n \"command\": [\"node\", \"plugins/infiknit/bin/infiknit-mcp.cjs\"]\n }\n }\n}\n\nClone https://github.com/Synthenova/infiknit-mcp and point the command at that launcher. Do not use a remote 127.0.0.1 URL.\n" + }, + { + "productId": "intentic", + "type": "projects", + "displayName": "intentic", + "repoUrl": "https://github.com/intentic/intentic", + "tagline": "Self-hosted browser workspace that runs OpenCode agents in parallel sandboxes", + "description": "A browser workspace for running coding agents on hardware you own, with OpenCode connected over ACP as a chat provider. Each agent gets its own Docker sandbox and git worktree, terminals survive disconnects, any browser or phone reopens the same fleet, and every change is reviewed as a per-file, per-hunk diff before it lands.", + "kind": "client", + "topics": [ + "security", + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "ivy-tendril", + "type": "projects", + "displayName": "Ivy Tendril", + "repoUrl": "https://github.com/Ivy-Interactive/Ivy-Tendril", + "tagline": "AI coding orchestrator with plan-based lifecycle and verification gates", + "description": "Open-source desktop app that orchestrates OpenCode, Claude Code, Codex, Antigravity, and Copilot through a structured plan-based lifecycle. Features verification gates, self-improving memory, human-in-the-loop checkpoints, and git worktree isolation. Local-first, agent-agnostic, stack-agnostic.", + "kind": "client", + "topics": [ + "orchestration", + "workflow", + "code-quality" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "orchestration", + "multi-agent", + "desktop", + "worktree" + ], + "homepageUrl": "https://tendril.ivy.app" + }, { "productId": "jailoc", "type": "projects", "displayName": "jailoc", "repoUrl": "https://github.com/seznam/jailoc", "tagline": "Sandboxed Docker environments for OpenCode agents", - "description": "CLI tool that wraps OpenCode agents in isolated Docker Compose environments with file isolation (bind-mounted workspaces only), network isolation (private subnets blocked by default with host allowlisting), and a per-workspace DinD sidecar. Zero config to start.\n", + "description": "CLI tool that wraps OpenCode agents in isolated Docker Compose environments with file isolation (bind-mounted workspaces only), network isolation (private subnets blocked by default with host allowlisting), and a per-workspace DinD sidecar. Zero config to start.", + "kind": "tool", + "topics": [ + "security", + "environment" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "justsessions", + "type": "projects", + "displayName": "JustSessions", + "repoUrl": "https://github.com/yangzichao/JustSessions", + "tagline": "Native Mac workspace for finding, reading, and resuming OpenCode sessions.", + "description": "Groups OpenCode and other coding-agent sessions by project, with searchable conversation history and embedded terminals that preserve the original CLI. Requires macOS 14 or later, Apple Silicon, and an installed, authenticated CLI.", + "kind": "client", + "topics": [ + "sessions" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2156,6 +7443,120 @@ "repoUrl": "https://github.com/remorses/kimaki/", "tagline": "Discord bot controller", "description": "A Discord bot to control opencode sessions on any computer via Discord.", + "kind": "client", + "topics": [ + "remote" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "kranz", + "type": "projects", + "displayName": "Kranz", + "repoUrl": "https://github.com/kranz-org/kranz", + "tagline": "Inspect and control live development services from OpenCode over MCP", + "description": "Kranz runs local development stacks with a terminal UI and CLI. Its built-in stdio MCP server lets OpenCode inspect services, readiness, logs, ports, actions, and run history, then perform authorized lifecycle operations against the same live runtime. The companion kranz-services Agent Skill teaches the agent to reuse existing runtimes and preview scoped changes.", + "kind": "mcp-server", + "topics": [ + "environment", + "observability" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [], + "homepageUrl": "https://kranz-org.github.io/kranz/guide/mcp" + }, + { + "productId": "lians", + "type": "projects", + "displayName": "Lians", + "repoUrl": "https://github.com/Lians-ai/Lians", + "tagline": "Local-first memory for OpenCode and any MCP-compatible AI agent", + "description": "Gives OpenCode durable memory across chats through its native MCP support. Ships a ready-to-copy OpenCode configuration and five-tool starter profile for remembering, recalling, inspecting, correcting, and explicitly erasing local memory. No Lians account, API key, model download, or cloud service is required; memory stays in a local SQLite database and can be shared with other compatible agents.", + "kind": "mcp-server", + "topics": [ + "memory" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "memory", + "mcp", + "persistence", + "local-first" + ] + }, + { + "productId": "llm-panel", + "type": "projects", + "displayName": "llm-panel", + "repoUrl": "https://github.com/musharna/llm-panel", + "tagline": "Put one question or diff to several LLM CLIs in parallel — opencode runs as a verified read-only agent", + "description": "Put one question or diff to several LLM CLIs in parallel — opencode judges run as a verified read-only agent alongside codex, claude and ollama — with every answer shown in full, an anonymised rebuttal round, cost accounting, a GitHub Action, and a measured miss rate on AACR-Bench.", + "kind": "tool", + "topics": [ + "code-quality", + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "cli", + "code-review", + "multi-model", + "opencode" + ], + "homepageUrl": "https://pypi.org/project/llm-panel/" + }, + { + "productId": "looptroop", + "type": "projects", + "displayName": "LoopTroop", + "repoUrl": "https://github.com/looptroop-ai/LoopTroop", + "tagline": "Local GUI orchestrator for autonomous AI coding using multi-model planning councils and isolated worktrees", + "description": "Local-first, open-source GUI orchestrator that runs long-running AI coding tickets end-to-end. An LLM Council plans the work, tasks are decomposed into atomic units (Beads) executed in isolated git worktrees, and a Ralph Loop recovers from errors with a fresh context. Built on OpenCode.", + "kind": "client", + "topics": [ + "context", + "orchestration", + "workflow" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [ + "orchestration", + "multi-agent", + "context-engineering", + "local-first", + "opencode" + ], + "homepageUrl": "https://www.looptroop.ovh/" + }, + { + "productId": "magents", + "type": "projects", + "displayName": "magents", + "repoUrl": "https://github.com/abnegate/magents", + "tagline": "Read, hand off to, message, and spawn OpenCode, Claude Code, Codex, Cursor, and Gemini sessions from one MCP server", + "description": "Rust MCP server and CLI over the session files coding agents already write. From OpenCode you can list and read other live sessions, search transcripts, hand off compact state into another chat, send into a specific session, or spawn an independent headless session that replies through a shared inbox. Reads OpenCode's session database directly; `magents install --all` registers the MCP server in opencode.json and adds the magents skill. Homebrew, APT, binaries, and Docker. MIT licensed.", + "kind": "mcp-server", + "topics": [ + "orchestration", + "sessions" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2165,9 +7566,85 @@ "productId": "mcp-voice-interface", "type": "projects", "displayName": "MCP Voice Interface", - "repoUrl": "https://github.com/shantur/mcp-voice-interface", + "repoUrl": "https://github.com/shantur/jarvis-mcp", "tagline": "Talk to AI assistants", "description": "Talk to AI assistants using your voice through a web browser. Compatible with Claude Desktop and opencode.", + "kind": "client", + "also": [ + "mcp-server" + ], + "topics": [ + "voice" + ], + "compat": "v1", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "mimo-code", + "type": "projects", + "displayName": "MiMo-Code", + "repoUrl": "https://github.com/shin4/mio", + "tagline": "Voice-driven multimodal desktop coding agent for MiMo", + "description": "A native desktop coding agent for the MiMo model family — Windows & macOS, no TUI — built on the OpenCode harness and adapted to be MiMo-first. Adds native multimodal understanding (image, PDF, video) plus voice dictation (ASR) and speech synthesis (TTS), with cost-aware model selection.", + "kind": "client", + "topics": [ + "ui", + "voice" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "desktop", + "gui", + "opencode", + "multimodal", + "voice", + "asr", + "tts", + "mimo" + ], + "homepageUrl": "https://shin4.github.io/mimo-code/" + }, + { + "productId": "mnemoverse", + "type": "projects", + "displayName": "Mnemoverse", + "repoUrl": "https://github.com/mnemoverse/mcp-memory-server", + "tagline": "MCP memory server that re-ranks recall from reported outcomes, backed by a hosted engine", + "description": "MIT-licensed MCP server for agent memory, backed by a hosted engine that re-ranks recall from reported outcomes rather than similarity alone. OpenCode can use it as a local MCP server (npm `@mnemoverse/mcp-memory-server`) or as a remote MCP server at https://mcp.mnemoverse.com/mcp with OAuth sign-in, and the same memory is shared with Claude Code, Cursor, VS Code, and ChatGPT. The engine is hosted and needs a Mnemoverse account, with a free tier.", + "kind": "mcp-server", + "topics": [ + "memory" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "mcp", + "memory", + "opencode" + ], + "homepageUrl": "https://mnemoverse.com/docs/api/remote-mcp-server" + }, + { + "productId": "myc", + "type": "projects", + "displayName": "myc", + "repoUrl": "https://github.com/aistastudio/myc", + "tagline": "Local task queue and decision memory for coding agents, wired into opencode with one command", + "description": "A local task-and-memory layer for coding agents (opencode, Claude Code, Codex, Kimi). One SQLite file next to the repo holds a task queue with dependencies, blockers and atomic claims, an oplog of decisions with hybrid search, and a code index; `myc wire` installs the opencode plugin and MCP server. No network calls of its own, no API key, MIT.", + "kind": "mcp-server", + "topics": [ + "memory", + "workflow" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2180,6 +7657,29 @@ "repoUrl": "https://github.com/NextProb/nextprob", "tagline": "Desktop notebook for vibe-coded websites, edited by your local AI coding-agent CLI (OpenCode and others)", "description": "Electron desktop app that turns a workspace folder of plain .html files into an AI-editable notebook. Agent-agnostic — edit notes with OpenCode or any other agent CLI in an embedded terminal. Notes are real HTML pages. Each note is a self-contained folder that can include a SQLite database, key/value store, attached files, and scripts — so it can grow from a static page into a sortable table, interactive dashboard, or research tool.", + "kind": "client", + "topics": [ + "workflow" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "nsq", + "type": "projects", + "displayName": "nsq", + "repoUrl": "https://github.com/glmn-ai/neurosquad-cli", + "tagline": "Run OpenCode, Claude Code and Codex side by side in one terminal and see which one needs you", + "description": "Open-source CLI that runs OpenCode (1.x and 2.x), Claude Code, Codex or any command side by side in one terminal. Status comes from each CLI's own events (working / needs you, with the question / finished), and a permission prompt can be answered y/a/n without opening the agent. A daemon keeps agents alive when the terminal closes, each agent can get its own git worktree, and cost is tracked per agent. Never writes to opencode.json; each session gets its own config layer. OpenRouter and local model servers supported. No account, no telemetry. MIT, `npx neurosquad`.", + "kind": "tool", + "topics": [ + "environment", + "orchestration" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2192,6 +7692,11 @@ "repoUrl": "https://github.com/hungthai1401/occtx", "tagline": "Switch contexts quickly", "description": "A command-line tool for switching between different opencode contexts quickly.", + "kind": "tool", + "topics": [ + "environment" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2201,9 +7706,33 @@ "productId": "oc-manager", "type": "projects", "displayName": "OC Manager", - "repoUrl": "https://github.com/kcrommett/oc-manager", + "repoUrl": "https://github.com/shuv1337/oc-manager", "tagline": "Metadata TUI", "description": "Terminal UI for inspecting, filtering, and pruning OpenCode metadata stored on disk.", + "kind": "client", + "topics": [ + "sessions", + "ui" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "oc-monitor", + "type": "projects", + "displayName": "oc-monitor", + "repoUrl": "https://github.com/bikky-kc013/oc-monitor", + "tagline": "Real-time terminal dashboard for tracking OpenCode session costs and usage.", + "description": "A terminal UI (built with Go and Bubble Tea) that reads your local OpenCode SQLite database to show live session activity, burn-rate charts, and cost breakdowns by agent, model, and project. Includes daily/hourly usage trends with a calendar heatmap, per-session token and tool-call inspection, full-text search across sessions, and JSON export. All data stays local — the only network call is an optional lookup to models.dev for model context-window sizes.", + "kind": "client", + "topics": [ + "cost", + "observability" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2216,6 +7745,63 @@ "repoUrl": "https://github.com/Shlomob/ocmonitor-share", "tagline": "CLI monitoring tool", "description": "A CLI tool for monitoring and analysing opencode AI coding usage.", + "kind": "tool", + "topics": [ + "observability" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "ocm", + "type": "projects", + "displayName": "ocm", + "repoUrl": "https://github.com/wntic/ocm", + "tagline": "Plugin marketplaces for OpenCode - install skills, agents, commands and MCP servers from any git repo, globally", + "description": "Turn any git repository into a plugin marketplace. `ocm add ` installs its skills, agents, commands, JS plugins and MCP servers once into your global OpenCode config, so they work in every project, and `ocm update` plus a startup auto-sync keep them current. Includes a /ocm TUI for browsing, asks before any plugin code runs, and never overwrites your own files.", + "kind": "tool", + "topics": [ + "environment" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "ocp", + "type": "projects", + "displayName": "ocp", + "repoUrl": "https://github.com/alvarosanchez/ocp", + "tagline": "Manage OpenCode config profiles in Git", + "description": "A CLI for switching OpenCode configuration profiles stored in Git repositories.", + "kind": "tool", + "topics": [ + "environment" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "ocp-xterr", + "type": "projects", + "displayName": "OCP", + "repoUrl": "https://github.com/xterr/ocp", + "tagline": "Isolated OpenCode profiles", + "description": "Juggling work and personal OpenCode accounts means hand-swapping env vars and clobbering your sessions. ocp gives each project its own auth, session history, and config — and switches automatically based on the directory you're in. Think direnv for OpenCode.", + "kind": "tool", + "topics": [ + "environment", + "providers" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2228,6 +7814,11 @@ "repoUrl": "https://github.com/vtemian/octto", "tagline": "Interactive browser UI for AI brainstorming", "description": "Interactive browser UI for AI brainstorming with multi-question forms, parallel exploration branches, and visual feedback.", + "kind": "client", + "topics": [ + "workflow" + ], + "compat": "v1", "scope": [ "global" ], @@ -2240,6 +7831,28 @@ "repoUrl": "https://github.com/kdcokenny/ocx", "tagline": "OpenCode package manager", "description": "The missing package manager for OpenCode extensions - ShadCN model with Ghost Mode.", + "kind": "tool", + "topics": [ + "environment" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "oos", + "type": "projects", + "displayName": "oos", + "repoUrl": "https://github.com/wsaaaqqq/oos", + "tagline": "Find any OpenCode session across all projects and resume it instantly", + "description": "A TUI fuzzy finder over every OpenCode session from every project — type keywords to filter in real time, pick with ↑/↓, Enter to jump back into the conversation. Go, zero config, single binary.", + "kind": "tool", + "topics": [ + "sessions" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2249,9 +7862,15 @@ "productId": "open-agent", "type": "projects", "displayName": "Open Agent", - "repoUrl": "https://github.com/Th0rgal/openagent", + "repoUrl": "https://github.com/Th0rgal/orb", "tagline": "Self-hosted control plane", "description": "Self-hosted control plane for OpenCode agents with isolated Linux workspaces (systemd-nspawn), git-backed Library configuration, and multi-platform dashboards (Next.js web, SwiftUI iOS).", + "kind": "client", + "topics": [ + "remote", + "orchestration" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2264,6 +7883,11 @@ "repoUrl": "https://github.com/bobum/open-dispatch", "tagline": "Control agents from Slack, Teams, or Discord — locally or via Fly.io Sprites", "description": "Bridge app connecting chat platforms (Slack/Teams/Discord) to AI coding assistants. Run agents locally or spin up isolated Fly.io Sprites for parallel execution. Supports 75+ AI providers via OpenCode, Claude CLI, real-time output streaming, session persistence, and smart message routing.", + "kind": "client", + "topics": [ + "remote" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2273,14 +7897,63 @@ "productId": "openchamber", "type": "projects", "displayName": "OpenChamber", - "repoUrl": "https://github.com/btriapitsyn/openchamber", + "repoUrl": "https://github.com/openchamber/openchamber", "tagline": "GUI for OpenCode", "description": "A fan-made web and desktop interface for OpenCode with VS Code extension, multiple sessions, and git worktrees management.", + "kind": "client", + "topics": [ + "ui" + ], + "compat": "v2", "scope": [ "global" ], "tags": [] }, + { + "productId": "openchamber-design-studio", + "type": "projects", + "displayName": "OpenChamber Design Studio", + "repoUrl": "https://github.com/lastonoga/openchamber-design-studio", + "tagline": "Open, local alternative to Claude Design inside OpenChamber", + "description": "An OpenChamber extension that turns design work into a chat loop. It opens your running app in a real Chrome window beside the conversation; Cmd/Ctrl-click any element to attach it to the chat as a reference (selector, markup, computed styles), and the agent edits the real project while the preview reloads. Ships Design Mode (/design), per-project harness plugin, DESIGN.md / tokens.css authority with a vendored design-system preset catalog, project scaffolding, and a .design-studio.json project config. MIT, install from a git URL via Settings → Extensions.", + "kind": "client", + "topics": [ + "ui", + "media" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "openclient", + "type": "projects", + "displayName": "OpenClient", + "repoUrl": "https://github.com/ntoporcov/openclient", + "tagline": "Native iPhone and iPad companion for self-hosted OpenCode servers", + "description": "Native SwiftUI client for browsing projects, resuming sessions, streaming chat, handling permission and question prompts, and following active work through Live Activities and widgets.", + "kind": "client", + "topics": [ + "remote", + "ui" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "ios", + "ipad", + "mobile", + "client", + "swiftui", + "self-hosted" + ], + "homepageUrl": "https://open-client.com/" + }, { "productId": "opencode-a2a", "type": "projects", @@ -2288,6 +7961,12 @@ "repoUrl": "https://github.com/Intelligent-Internet/opencode-a2a", "tagline": "Full A2A Protocol support for OpenCode.", "description": "A production-ready A2A Protocol implementation that exposes OpenCode as a standardized Agent-to-Agent service, enabling seamless cross-agent collaboration and automated workflows.", + "kind": "tool", + "topics": [ + "orchestration", + "integrations" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2297,9 +7976,15 @@ "productId": "opencode-actions", "type": "projects", "displayName": "Opencode Actions", - "repoUrl": "https://github.com/Svtter/opencode-actions", + "repoUrl": "https://github.com/sun-praise/opencode-actions", "tagline": "Reusable GitHub Actions for installing and running OpenCode in CI/CD workflows", "description": "A collection of reusable GitHub Actions that make it easy to integrate OpenCode into your CI/CD pipelines. Includes actions for PR review, architecture review, spec coverage checking, and one-step opencode setup and execution. Supports caching, retry logic, and multiple LLM providers.", + "kind": "tool", + "topics": [ + "git", + "workflow" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2311,7 +7996,12 @@ "displayName": "opencode-agent for Cowork", "repoUrl": "https://github.com/MekaretEriker/opencode-agent-for-cowork", "tagline": "Cowork plugin that turns Claude into an intelligent orchestrator for OpenCode sessions", - "description": "A Cowork (Claude desktop) plugin that bridges natural language conversations with OpenCode.\nHandles agent routing (build/plan/@general), stall detection, result validation (diff\ncoherence, tests, build, semantic alignment), per-project operational memory, provider\nfallback chain (anthropic → openrouter → openai), and MCP composability with existing\nuser tools. Ships 8 orchestration skills, 3 scheduled-task recipes, and 1 custom agent\ntemplate (cowork-with-github). Install: drag-and-drop .plugin into Cowork.\n", + "description": "A Cowork (Claude desktop) plugin that bridges natural language conversations with OpenCode.\nHandles agent routing (build/plan/@general), stall detection, result validation (diff\ncoherence, tests, build, semantic alignment), per-project operational memory, provider\nfallback chain (anthropic → openrouter → openai), and MCP composability with existing\nuser tools. Ships 8 orchestration skills, 3 scheduled-task recipes, and 1 custom agent\ntemplate (cowork-with-github). Install: drag-and-drop .plugin into Cowork.", + "kind": "tool", + "topics": [ + "orchestration" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2330,11 +8020,59 @@ "repoUrl": "https://github.com/jjserenity/opencode-chat-export", "tagline": "MCP server to export chat history to Markdown", "description": "MCP server that exports OpenCode chat history to Markdown files with tool calls, reasoning, and cost summaries. Export current session, specific sessions by ID, or bulk exports. pip installable.", + "kind": "mcp-server", + "topics": [ + "sessions" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "opencode-dashboard", + "type": "projects", + "displayName": "OpenCode Dashboard", + "repoUrl": "https://github.com/touchkale/opencode-dashboard", + "tagline": "Single-file live token usage dashboard with zero dependencies", + "description": "A live usage dashboard served by one Python file — no framework, no build step, no dependencies. Token-first views of sessions, models, projects, tokens by changed file/subsystem, tokens per git commit, and a 52-week activity heatmap, with click-to-filter and JSON/CSV export.", + "kind": "client", + "topics": [ + "cost", + "ui" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-db-clean", + "type": "projects", + "displayName": "OpenCode Database Cleaner", + "repoUrl": "https://github.com/chncaesar/opencode-db-clean", + "tagline": "Safely analyze and reclaim unused space in OpenCode's SQLite database", + "description": "A zero-dependency Python CLI that reports live data and freelist bloat in OpenCode's local SQLite database, then safely reclaims unused disk space with process checks, WAL checkpointing, verified backups, VACUUM, and integrity checks. It does not delete sessions.", + "kind": "tool", + "topics": [ + "sessions", + "environment" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "database", + "sqlite", + "maintenance", + "disk-space", + "reliability" + ], + "installation": "Install from PyPI:\n\n```bash\npip install ocdbc\n```\n\nRun `ocdbc analyze` first. Close OpenCode before running `ocdbc vacuum`.\n" + }, { "productId": "opencode-ddev", "type": "projects", @@ -2342,6 +8080,11 @@ "repoUrl": "https://github.com/JUVOJustin/opencode-ddev", "tagline": "DDEV container wrapper", "description": "Wraps bash commands to execute inside the DDEV container (Docker-based PHP development environments).", + "kind": "tool", + "topics": [ + "environment" + ], + "compat": "v1", "scope": [ "global" ], @@ -2354,6 +8097,30 @@ "repoUrl": "https://github.com/Eldorado-ling/opencode-handoff-p2p", "tagline": "Transfer OpenCode session share URLs P2P via private GitHub inbox repos", "description": "An OpenCode skill that transfers session share URLs between machines or collaborators peer-to-peer using personal GitHub private inbox repositories. Features a 5-tier verification pipeline (filename regex, trusted-sender allowlist, byte-level content validation, GitHub commit author+committer attribution, GPG signature), transactional fetch-before-delete (URL fetch failure preserves the inbox file for retry), and a Chinese-language trust-boundary preamble that prevents fetched share content from autonomously triggering local actions. Each user owns one private inbox repo; senders push directly into it via collaborator access. Includes a reference Python verification script for deterministic cross-shell behavior.", + "kind": "tool", + "topics": [ + "sessions", + "git" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-helper", + "type": "projects", + "displayName": "Opencode Helper", + "repoUrl": "https://github.com/v587d/opencode-helper", + "tagline": "Cleanup, analysis & visualization CLI for OpenCode", + "description": "Zero-dependency Python CLI that cleans old sessions and temp files, analyzes model/tool/MCP/skill usage patterns with AI interpretation, and generates visual workflow diagrams. pip install opencode-helper.", + "kind": "tool", + "topics": [ + "sessions", + "ui" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2366,6 +8133,11 @@ "repoUrl": "https://github.com/joeyism/opencode-history-search", "tagline": "Search OpenCode conversations with keyword, regex, and fuzzy search", "description": "Search through your OpenCode conversation history with powerful keyword, regex, and fuzzy search capabilities. Features date filtering, multiple match types (titles, messages, tools, file paths), and fast performance (<50ms queries).", + "kind": "tool", + "topics": [ + "sessions" + ], + "compat": "v1", "scope": [ "global" ], @@ -2375,9 +8147,15 @@ "productId": "opencode-kanban", "type": "projects", "displayName": "opencode-kanban", - "repoUrl": "https://github.com/qrafty-ai/opencode-kanban", + "repoUrl": "https://github.com/TomCC7/opencode-kanban", "tagline": "Kanban-style task management for opencode", "description": "Kanban tool that allows you to stay in terminal.", + "kind": "client", + "topics": [ + "workflow", + "ui" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2390,6 +8168,11 @@ "repoUrl": "https://github.com/dzianisv/opencode-mobile", "tagline": "Android client for OpenCode — drive your self-hosted agent from your phone", "description": "Free, open-source (MIT) Android app that connects to an opencode server you run yourself. Stream coding sessions in real time, review file diffs, and approve tool calls from your phone. Install via the F-Droid repo or a signed APK.", + "kind": "client", + "topics": [ + "remote" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2400,13 +8183,35 @@ ], "homepageUrl": "https://dzianisv.github.io/opencode-mobile/" }, + { + "productId": "opencode-mobile-2", + "type": "projects", + "displayName": "OpenCode Mobile", + "repoUrl": "https://github.com/alvarolorentedev/opencode-mobile", + "tagline": "Your OpenCode workflow in your pocket. Manage AI coding agents from Android and iOS.", + "description": "OpenCode Mobile is a free, open-source, community-built companion app for OpenCode on Android and iOS. Connect to your self-hosted OpenCode server to start coding sessions, monitor agent progress, approve permissions, review code changes, browse files, access the terminal, and manage projects and AI models directly from your phone. Optional secure remote connectivity lets you stay connected to your development environment from anywhere, while your code and workloads remain on your own computer. No cloud-hosted development environment required.", + "kind": "client", + "topics": [ + "remote" + ], + "compat": "v2", + "scope": [ + "global" + ], + "tags": [] + }, { "productId": "opencode-neovim", "type": "projects", "displayName": "Opencode Neovim", - "repoUrl": "https://github.com/NickvanDyke/opencode.nvim", + "repoUrl": "https://github.com/nickjvandyke/opencode.nvim", "tagline": "Neovim plugin", "description": "Neovim plugin for making convenient editor-aware prompts.", + "kind": "client", + "topics": [ + "ui" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2419,6 +8224,12 @@ "repoUrl": "https://github.com/leolaurindo/opencode-profile-router", "tagline": "Profile router for auth and selective config isolation", "description": "Shell wrapper for OpenCode that selects named profiles by path and can isolate provider login state, config directories, and data roots selectively and independently per profile.", + "kind": "tool", + "topics": [ + "providers", + "environment" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2429,6 +8240,57 @@ "routing" ] }, + { + "productId": "opencode-rust", + "type": "projects", + "displayName": "opencode-rust", + "repoUrl": "https://github.com/vakandi/opencode-rust", + "tagline": "The open source AI coding agent, in Rust - CLI, TUI and HTTP server", + "description": "An independent Rust implementation of the TypeScript opencode, providing a CLI, a TUI and an HTTP server for local AI agents, with no Docker required. MIT licensed, 21 crates and 571 tests. The command is `opr`; install with `npm install -g opencode-rust` or `brew install vakandi/tap/opencode-rust`. Not affiliated with the OpenCode team. Docs: https://vakandi.github.io/opencode-rust/", + "kind": "fork", + "topics": [ + "environment" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "rust", + "fork", + "cli", + "tui" + ] + }, + { + "productId": "opencode-sentry", + "type": "projects", + "displayName": "OpenCode Sentry", + "repoUrl": "https://github.com/sudo-heyu/OpenCodesentry", + "tagline": "Android companion: scan-to-pair live OpenCode console + screen-off alerts over Tailscale", + "description": "The Android companion for OpenCode. Scan one QR printed by the self-hosted bridge and the official web console opens in-app: watch every session live, send prompts, follow reasoning, tool runs and streaming output, switch models — all directly over your own Tailscale network. A foreground service also rings, vibrates and speaks when a task finishes, needs permission, asks a question or fails, with a three-layer keep-alive (accessibility keeper, persistent Job, exact-alarm watchdog) that survives aggressive vendor-ROM clean-ups. Everything stays on your own tailnet — no third-party server. Not affiliated with the OpenCode team.", + "kind": "client", + "topics": [ + "remote", + "notifications" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "android", + "notifications", + "mobile", + "tailscale", + "self-hosted", + "tts", + "console", + "ai-agent", + "remote-control" + ], + "installation": "Download the APK from the [Releases page](https://github.com/sudo-heyu/OpenCodesentry/releases)\n(Android 12+).\n\nOn the machine that runs OpenCode, start the bridge with a pairing QR:\n`python3 tools/bridge/opencode-bridge.py --pair`, then scan the QR from the app's\n\"主页\" tab — one scan configures the console, the address and the credentials.\nManual setup and the full guide:\n[tools/bridge/README.md](https://github.com/sudo-heyu/OpenCodesentry/blob/main/tools/bridge/README.md).\n" + }, { "productId": "opencode-session", "type": "projects", @@ -2436,18 +8298,11 @@ "repoUrl": "https://github.com/GNITOAHC/opencode-session", "tagline": "Session viewer & manager", "description": "View & Manage sessions for opencode, also detect orphan sessions for deletion", - "scope": [ - "global" + "kind": "tool", + "topics": [ + "sessions" ], - "tags": [] - }, - { - "productId": "opencode-sessions", - "type": "projects", - "displayName": "Opencode Sessions", - "repoUrl": "https://github.com/malhashemi/opencode-sessions", - "tagline": "Session tracker", - "description": "Session management tool for opencode to track and organise coding sessions.", + "compat": "n/a", "scope": [ "global" ], @@ -2460,6 +8315,13 @@ "repoUrl": "https://github.com/arnavpisces/opencode-sidebar", "tagline": "Tmux sidebar for managing OpenCode sessions", "description": "A tmux-backed sidebar launcher for OpenCode that keeps the session list, preview pane, and OpenCode TUI together in one workspace. It supports session recall, background sessions, search, project folders, deletion, and sound notifications.", + "kind": "client", + "topics": [ + "sessions", + "ui", + "environment" + ], + "compat": "v1", "scope": [ "global" ], @@ -2472,6 +8334,11 @@ "repoUrl": "https://github.com/malhashemi/opencode-skills", "tagline": "Skills management", "description": "Skills management system for organising and tracking opencode capabilities.", + "kind": "tool", + "topics": [ + "prompting" + ], + "compat": "v1", "scope": [ "global" ], @@ -2484,11 +8351,40 @@ "repoUrl": "https://github.com/grinev/opencode-telegram-bot", "tagline": "Telegram bot client for OpenCode CLI", "description": "Run and monitor AI coding tasks from your phone while everything runs locally on your machine.", + "kind": "client", + "topics": [ + "remote" + ], + "compat": "v2", "scope": [ "global" ], "tags": [] }, + { + "productId": "opencode-unlimited-proxy", + "type": "projects", + "displayName": "OpenCode Unlimited Proxy", + "repoUrl": "https://github.com/ebouther/opencode-unlimited-proxy", + "tagline": "Self-hosted OpenAI-compatible gateway for the OpenCode free tier, with a de-duplicated egress pool", + "description": "Serves OpenCode's anonymous free tier (`Bearer public`) through an OpenAI-compatible API. Documents and implements the four server-side conditions those models gate on, so callers outside the CLI don't hit `403 FreeTierError`: a tool named exactly `read` (renaming it does not count), forced `stream: true`, a versioned `User-Agent`, and a canonically-encoded session id. Each one is independently probeable with `scripts/gate-probe.py`, which ships negative controls so a pass cannot be confused with a broken harness. In front of the gateway sits a de-duplicated pool of rotating egress addresses, so six nodes are six quota buckets rather than three.", + "kind": "tool", + "topics": [ + "providers" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "gateway", + "proxy", + "free-tier", + "self-hosted", + "openai-compatible" + ], + "installation": "```bash\ngit clone https://github.com/ebouther/opencode-unlimited-proxy && cd opencode-unlimited-proxy/stack\ncp .env.example .env && sed -i 's/WARP_ACCEPT_TOS=0/WARP_ACCEPT_TOS=1/' .env\ndocker compose up -d --build\n../scripts/smoke.sh\n```\n\nThen point any OpenAI-compatible client at `http://127.0.0.1:8080/v1`.\n\nOnly the gate probe is needed to *diagnose* the free tier, and it needs no\nstack at all:\n\n```bash\n./scripts/gate-probe.py\n```\n" + }, { "productId": "opencode-vim", "type": "projects", @@ -2496,6 +8392,11 @@ "repoUrl": "https://github.com/leohenon/opencode-vim", "tagline": "OpenCode fork with built-in Vim mode", "description": "An unofficial OpenCode fork that adds Vim motions, navigation, and editing directly to the OpenCode TUI.", + "kind": "fork", + "topics": [ + "ui" + ], + "compat": "v2", "scope": [ "global" ], @@ -2510,14 +8411,78 @@ "productId": "opencode-web", "type": "projects", "displayName": "Opencode Web", - "repoUrl": "https://github.com/kcrommett/opencode-web", + "repoUrl": "https://github.com/shuv1337/oc-web", "tagline": "Browser-based access", "description": "Web interface for opencode - browser-based access to AI coding agent.", + "kind": "client", + "topics": [ + "remote", + "ui" + ], + "compat": "v1", "scope": [ "global" ], "tags": [] }, + { + "productId": "openhook", + "type": "projects", + "displayName": "Openhook", + "repoUrl": "https://github.com/openhook-dev/openhook-inbox", + "tagline": "Give OpenCode a callback inbox to test webhook integrations through MCP.", + "description": "Open-source callback inbox with a hosted Streamable HTTP MCP endpoint and an OpenCode setup recipe. Create a disposable inbox, wait for a webhook, inspect the received body and headers, then clean up the test inbox. Private per-inbox tokens control access to captured events. Also supports email and DNS capture, with self-hosting available.", + "kind": "mcp-server", + "topics": [ + "code-quality", + "integrations" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "openkrak", + "type": "projects", + "displayName": "OpenKrak", + "repoUrl": "https://github.com/FrnzJulianBergmann/openkrak", + "tagline": "Pre-computes your repo structure via Dorchester engine before the LLM sees a single token", + "description": "OpenKrak is an MCP server that runs the Dorchester static analysis engine on your repository and delivers a structured Mahadata brief to your coding agent before it reads any files. Cuts token usage 20-80% by replacing raw file reads with a pre-computed dependency graph, hotspot ranking, and blast radius map. Works with OpenCode. Free tier includes 15 queries per 24h rolling window. Install via npm install -g openkrak-mcp.", + "kind": "tool", + "topics": [ + "code-intel", + "context" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "openmate", + "type": "projects", + "displayName": "OpenMate", + "repoUrl": "https://github.com/bob-dawson/openmate", + "tagline": "Offline-first Android client for OpenCode, connect from anywhere", + "description": "Native Android (Kotlin/Compose) client for a self-hosted opencode server. Connects over your local network or automatically through a cloud relay, so you can reach your agent from anywhere. A lightweight Bridge streams incremental, seq-based sync from opencode's own database into a local copy on your phone, so you can read and reply to sessions offline. Supports opencode v2 only.", + "kind": "client", + "topics": [ + "remote" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "android", + "mobile", + "client", + "offline" + ] + }, { "productId": "openspec", "type": "projects", @@ -2525,6 +8490,11 @@ "repoUrl": "https://github.com/Fission-AI/OpenSpec", "tagline": "Spec-driven development", "description": "Spec-driven development with opencode - structured specification management.", + "kind": "tool", + "topics": [ + "workflow" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2537,6 +8507,11 @@ "repoUrl": "https://github.com/hamidi-dev/opentab", "tagline": "Terminal UI for browsing your OpenCode spend by month, day, project, session, and model", "description": "A terminal UI that reads OpenCode's local SQLite database (read-only) to show where your tokens and money went — by month, day, project, session, and model, with spend-over-time trends and drill-down into your most expensive sessions (model mix and subagent costs included). Standard-library Python only, offline by default. Also reads Claude Code, Codex, the Copilot CLI, and more.", + "kind": "client", + "topics": [ + "cost" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2557,6 +8532,12 @@ "repoUrl": "https://github.com/different-ai/openwork", "tagline": "Desktop GUI for OpenCode workflows", "description": "Open-source alternative to Claude Cowork built on top of OpenCode. Provides a polished desktop UI for sessions, skills, plugins, and templates.", + "kind": "client", + "topics": [ + "ui", + "workflow" + ], + "compat": "v1", "scope": [ "global" ], @@ -2568,6 +8549,70 @@ ], "homepageUrl": "https://openwork.software/" }, + { + "productId": "openwts", + "type": "projects", + "displayName": "openwts", + "repoUrl": "https://github.com/atpaawej/openwts", + "tagline": "Isolated git worktrees for AI coding agents — opencode, Claude Code, and more", + "description": "Stop context-switching. openwts creates isolated git worktrees for each task\nand opens your AI coding agent inside them — no stashing, no partial commits,\nno \"what branch was I on?\"\n\nOne command — `openwts opencode hotfix` — creates a worktree, opens opencode\ninside it, and cleans up when you exit. Jump between tasks like it's nothing.\n\nFeatures\n- Agent-agnostic: opencode, Claude Code, and any AI CLI on PATH\n- Auto-detects opencode, falls back to an interactive picker\n- Works on all platforms: Linux, macOS, Windows\n- Manifest tracking — never touches worktrees it didn't create\n- Cleanup modes: auto-remove, prompt, or leave\n\nZero config. One env var if you want a default agent.", + "kind": "tool", + "topics": [ + "git", + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "productivity", + "workflow", + "git", + "worktree", + "multi-agent" + ] + }, + { + "productId": "orcareplay", + "type": "projects", + "displayName": "OrcaReplay", + "repoUrl": "https://github.com/Continuum-AI-Corp/OrcaReplay", + "tagline": "Record an OpenCode run, replay it offline with the network off, fork it onto another model", + "description": "Records an OpenCode session without modifying it, then replays that run with the network off and reproduces it with the network off, or forks it from any step so the model is the only thing that changed. Because OpenCode keeps its provider origin in opencode.json rather than an environment variable, there is nothing to redirect: the adapter terminates the TLS OpenCode opened itself using a per-run CA that only the launched process trusts and that is deleted when the run ends, and your config is left untouched. Alongside the model traffic it records shell exit codes and timing, per-turn file changes and MCP calls, all on one timeline. Apache-2.0, Node 20+, and the trace format is a published spec so other readers can be written against it.", + "kind": "tool", + "topics": [ + "observability", + "code-quality" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "debugging", + "replay", + "observability", + "cli" + ] + }, + { + "productId": "orkas", + "type": "projects", + "displayName": "Orkas", + "repoUrl": "https://github.com/Orkas-AI/Orkas", + "tagline": "Local-first multi-agent desktop workspace with OpenCode orchestration", + "description": "Orkas is an open-source desktop AI workforce whose Commander coordinates specialist agents and can run OpenCode alongside Claude Code, Codex, and Cline from one chat. Conversations, files, agent configurations, and model keys stay local.", + "kind": "client", + "topics": [ + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, { "productId": "p4oc", "type": "projects", @@ -2575,11 +8620,167 @@ "repoUrl": "https://github.com/theblazehen/P4OC", "tagline": "Android client for OpenCode", "description": "Native Android app for controlling OpenCode from your phone. Chat with AI, manage sessions, browse files with syntax highlighting, view diffs, and use an embedded terminal — all styled with a terminal UI aesthetic. Available on Google Play.", + "kind": "client", + "topics": [ + "remote" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "parallel-code", + "type": "projects", + "displayName": "Parallel Code", + "repoUrl": "https://github.com/johannesjo/parallel-code", + "tagline": "Orchestrate multiple AI coding agents simultaneously", + "description": "Desktop app for orchestrating multiple AI coding agents (Claude Code, Codex CLI, Gemini CLI) simultaneously in isolated git worktrees. Run agents in parallel, each in their own branch, and merge results when ready.", + "kind": "client", + "topics": [ + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "patchwarden", + "type": "projects", + "displayName": "PatchWarden", + "repoUrl": "https://github.com/jiezeng2004-design/PatchWarden", + "tagline": "Local-first MCP safety layer for OpenCode and other AI coding agents", + "description": "PatchWarden is a local-first MCP safety and verification layer for AI coding agents. It provides workspace confinement, command allowlists, scope-violation detection, and auditable task evidence for OpenCode and other MCP clients.", + "kind": "mcp-server", + "topics": [ + "security" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "mcp", + "security", + "verification", + "local-first", + "opencode" + ], + "homepageUrl": "https://github.com/jiezeng2004-design/PatchWarden#readme", + "installation": "```bash\nnpx -y patchwarden@1.6.2\n```\n" + }, + { + "productId": "pickysteve", + "type": "projects", + "displayName": "PickySteve", + "repoUrl": "https://github.com/KernelLord/pickysteve", + "tagline": "Local skill router and context picker for coding agents", + "description": "A cheap local model routes each prompt to the right skill via hybrid retrieval (BM25 + embeddings, RRF-fused) with cross-encoder reranking and an LLM judge, then assembles a minimal context bundle for the execution model. Runs fully offline on local Ollama by default and ships a fail-closed prompt-injection gate (ONNX classifier) that scans both requests and retrieved documents. Exposes an MCP stdio server and an OpenAI-compatible proxy, with a one-command installer wiring 18 coding agents including Claude Code, Cursor, and OpenCode.", + "kind": "mcp-server", + "topics": [ + "prompting", + "context" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "ppt-design-skill", + "type": "projects", + "displayName": "PPT Design Skill", + "repoUrl": "https://github.com/sunchaokun/PPT-Design-Skill", + "tagline": "One-liner PPT generation —40,000+ styles, AI images, fully editable .pptx", + "description": "AI-powered PPT generation skill for OpenCode, Claude Code, Codex, Cursor, and 13+ AI coding platforms. Three modes: FreeStyle (one-liner quick generation), Build Script (pixel-perfect delivery with python-pptx), and VI Build (enterprise template compliance). Features 40,000+ style combinations via natural language (--style \"dark cyberpunk\"), 5 AI image engines (Seedream/GPT Image/DALL-E/Wanx/Kimi), 10 diagram types, 28 design quality upgrades, advanced effects (3D shapes, gradient text, frosted glass, morph transitions), and CJK font support. Outputs fully editable .pptx files directly —356x faster than HTML-to-screenshot approaches. Includes a component library with 5,500+ SmartArt/GroupShape templates and one-command installation for all platforms.", + "kind": "skill", + "topics": [ + "media" + ], + "compat": "n/a", + "scope": [ + "project", + "global" + ], + "tags": [ + "ppt", + "presentation", + "design", + "python-pptx", + "ai-images", + "skill", + "productivity", + "diagram" + ] + }, + { + "productId": "pricewin", + "type": "projects", + "displayName": "PriceWin", + "repoUrl": "https://github.com/PriceDotWin/pricewin-agent-plugin", + "tagline": "Remote MCP server and skill for live hotel and flight prices across Booking.com, Agoda, Trip.com and Traveloka", + "description": "Compares live hotel and flight prices in USD across Booking.com, Agoda, Trip.com, Traveloka and Google Flights through one remote MCP server (https://mcp.price.win/mcp, no account or API key). Add it to opencode.json as a remote MCP server and copy the bundled pricewin-travel-search skill to ~/.agents/skills, which OpenCode loads automatically. Results name their source and link to it for booking.", + "kind": "mcp-server", + "topics": [ + "domain" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "professor", + "type": "projects", + "displayName": "Professor", + "repoUrl": "https://github.com/rezzminator/professor", + "tagline": "Fleet-boost discipline layer for Claude Code, Codex & OpenCode agents", + "description": "An LLM-harness fleet boost framework that turns your AI coding agents into a disciplined engineering team you can see, message, and hold to the rules. Ships a compiled .opencode/ layer (agents, commands, skill symlinks, opencode.jsonc with pinned denies) generated from its Claude sources, plus pfm, a Go CLI/TUI that lists OpenCode chats alongside Claude Code and Codex sessions.", + "kind": "skill", + "topics": [ + "workflow" + ], + "compat": "n/a", + "scope": [ + "project" + ], + "tags": [ + "opencode", + "claude-code", + "codex", + "multi-agent", + "cli" + ], + "homepageUrl": "https://github.com/rezzminator/professor" + }, + { + "productId": "qwen-audio-agent", + "type": "projects", + "displayName": "qwen-audio-agent", + "repoUrl": "https://github.com/QwenAudio/qwen-audio-agent", + "tagline": "Full-duplex voice runtime for OpenCode and other ACP agents", + "description": "Realtime full-duplex voice interface that connects to OpenCode natively over ACP, with one-click install and DashScope configuration. Conversations keep going while OpenCode runs tasks in the background, and task results flow back into the same voice conversation. Also supports Claude Code, Codex, Kimi Code, and more. Ships a macOS desktop app, terminal TUI, and web UI.", + "kind": "client", + "topics": [ + "voice" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "voice", + "speech", + "acp", + "desktop", + "tui" + ] + }, { "productId": "qwen-code-oai-proxy", "type": "projects", @@ -2587,6 +8788,11 @@ "repoUrl": "https://github.com/aptdnfapt/qwen-code-oai-proxy", "tagline": "Qwen model proxy", "description": "An OpenAI-Compatible Proxy Server for Qwen models.", + "kind": "tool", + "topics": [ + "providers" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2599,6 +8805,11 @@ "repoUrl": "https://github.com/JiaHuiRed/RedCode", "tagline": "TUI + GUI dual-interface AI coding assistant with MCP ecosystem", "description": "A feature-rich opencode fork with dual-interface (TUI terminal + GUI desktop), built-in MCP ecosystem (CodeGraph, TypeGraph, jCodeMunch, Browser, Vision, Web Search), automated memory system, AI personality system, skill extensions, and 3-tier permission guardrails. Privacy-first design with personal data fully separated from public templates.", + "kind": "fork", + "topics": [ + "ui" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2611,6 +8822,347 @@ "ai-agent" ] }, + { + "productId": "ritemark", + "type": "projects", + "displayName": "Ritemark", + "repoUrl": "https://github.com/ProductoryHQ/ritemark-native", + "tagline": "Markdown writing app for macOS and Windows where OpenCode works directly in your local documents.", + "description": "Open-source (MIT) desktop writing app with a visual editor for plain Markdown files in a folder on your computer. OpenCode, with your own API keys, is one of its built-in agents (beside Claude Code and Codex) and edits the documents in place, with a built-in terminal beside the document. Each window is one folder with its own conversations, AGENTS.md, agents and skills. Mermaid and draw.io diagrams, and export to Word and PDF.", + "kind": "client", + "topics": [ + "docs", + "ui" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "desktop", + "markdown", + "writing", + "gui" + ], + "homepageUrl": "https://ritemark.app" + }, + { + "productId": "roborev", + "type": "projects", + "displayName": "Roborev", + "repoUrl": "https://github.com/kenn-io/roborev", + "tagline": "Background code review agent with OpenCode agent-hook support", + "description": "A multi-agent background commit-review tool that runs automated code reviews and exposes a $roborev-fix skill via OpenCode's agent hook. Useful for catching issues before they land while keeping the review loop inside the OpenCode workflow.", + "kind": "tool", + "topics": [ + "code-quality", + "git" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "code-review", + "background-agent", + "git", + "opencode" + ] + }, + { + "productId": "rolecraft", + "type": "projects", + "displayName": "rolecraft", + "repoUrl": "https://github.com/rolecraft-sh/rolecraft", + "tagline": "The package manager for AI agents — install, test, publish, and manage skills & MCP servers across 86+ agents", + "description": "Zero-dependency CLI for installing AI agent skills as roles & behaviors from any source (local folders, GitHub, GitLab, SSH). Supports 86 agent targets (26 verified), lockfile-based CI re-install with `rolecraft ci`, `rolecraft doctor` for troubleshooting, and bundled team onboarding. Works with opencode, claude-code, cursor, and more.", + "kind": "tool", + "topics": [ + "environment", + "prompting" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "cli", + "skills", + "mcp", + "package-manager", + "agents", + "opencode" + ] + }, + { + "productId": "sabi-inference-router", + "type": "projects", + "displayName": "Sabi", + "repoUrl": "https://github.com/vizuh/sabi", + "tagline": "Adaptive per-round inference routing for coding agents — model, effort and provider scheduled against the trajectory", + "description": "Sits between a coding harness and its model providers and makes a fresh routing decision per inference round, not per session. Each round is classified from trajectory state — round position, tool calls and their results, failure evidence, context pressure — and a deterministic policy maps class to tier (failure → strong, exploration → cheap, first-turn → mid). An optional semantic judge (TypeSafe Jev) runs only on rounds the policy cannot classify, and is fail-open. The harness loop is untouched.\nExposes an OpenAI-compatible local proxy at 127.0.0.1:8787/v1. From OpenCode, `npm run connect:opencode` writes only a provider.sabi entry and the adaptive alias is `sabi/sabi-code`; fixed baselines `sabi/sabi-cheap`, `sabi/sabi-mid` and `sabi/sabi-strong` are available for comparison. Borrowed-auth passthrough is supported: the harness keeps its own credential and Sabi rewrites only model. Decisions and cost are inspectable via `npm run report`.", + "kind": "tool", + "topics": [ + "providers", + "cost" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "proxy", + "routing", + "model-routing", + "inference", + "scheduling", + "cost", + "opencode" + ], + "homepageUrl": "https://github.com/vizuh/sabi/blob/main/docs/adapters/opencode.md" + }, + { + "productId": "scvd-general-store", + "type": "projects", + "displayName": "SCVD General Store", + "repoUrl": "https://github.com/seancrecord/scvd-general-store-repo", + "tagline": "Skills and MCP tools for checking x402 endpoints before payment and signed receipts afterward", + "description": "An evidence observatory for agentic commerce with portable skills and a remote MCP service. OpenCode can load the verification skill and run a free endpoint preflight without a wallet or API key. Guidance covers signed-receipt checks and the limits of unpaid observations. Optional paid observations require an explicit spending decision; installation grants no payment authority.", + "kind": "mcp-server", + "topics": [ + "integrations" + ], + "compat": "n/a", + "scope": [ + "project" + ], + "tags": [ + "skills", + "mcp", + "x402", + "verification" + ], + "homepageUrl": "https://scvd.store", + "installation": "From a reviewed checkout of the source repository, copy\n`skills/scvd-general-store` and `skills/scvd-x402-verification` into your\nproject's `.opencode/skills/` directory, keeping each SKILL.md unchanged.\nMerge this remote server into your existing OpenCode configuration:\n\n```json\n{\n \"mcp\": {\n \"scvd-general-store\": {\n \"type\": \"remote\",\n \"url\": \"https://scvd.store/mcp\",\n \"enabled\": true\n }\n }\n}\n```\n\nAsk OpenCode to load `scvd-x402-verification` and run the free\n`preflight_endpoint` for a URL. Inspect the returned verdict, reached level\nand missing evidence. An unpaid reading does not prove payment or delivery.\n" + }, + { + "productId": "sdlc-assist", + "type": "projects", + "displayName": "SDLC-Assist", + "repoUrl": "https://github.com/PapiScholz/SDLC-Assist", + "tagline": "SDLC phase router skill - infers the phase from the repo, asks one question, hands off", + "description": "Agent skills that tell opencode which SDLC phase a request is in (analysis, planning, development, testing, deployment) from what the repo already contains, show the evidence, ask one confirmation and route to spec-driven-development, a QA gate and a release skill. Node only, no dependencies.", + "kind": "skill", + "topics": [ + "workflow", + "providers" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "skills", + "sdlc", + "spec-driven-development" + ], + "installation": "```bash\ncd ~ && npx skills add PapiScholz/SDLC-Assist\n```\nInstalls the skills into `~/.config/opencode/skills`. Optional `/sdlc-phase` command: copy `.opencode/command/sdlc-phase.md` from the repo to `~/.config/opencode/command/`.\n" + }, + { + "productId": "semantic-search-mcp", + "type": "projects", + "displayName": "semantic-search-mcp", + "repoUrl": "https://github.com/Zulaxy/semantic-search-mcp", + "tagline": "Semantic code search MCP server - find code by meaning across thousands of files", + "description": "Adds semantic code search to OpenCode. Find code by meaning across 6,900+ files in 2 seconds. 100% local 80MB model (bge-small-en-v1.5), zero API calls. Function-level extraction for PHP, JS, TS, Python, Go, Rust, Java. Hybrid scoring (70% embedding + 30% keyword), TUI config wizard, live progress bar, per-project caching.", + "kind": "mcp-server", + "topics": [ + "code-intel" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "session-coherence", + "type": "projects", + "displayName": "Session Coherence", + "repoUrl": "https://github.com/OutcomeFocusAi/session-coherence", + "tagline": "Cross-tool session memory for AI coding assistants", + "description": "Cross-tool session memory for AI coding assistants. One markdown chronicle shared by 9 tools (Claude Code, Cursor, Codex, Gemini CLI, Aider, and more). Zero dependencies, ~300 token fixed cost, 100% local.", + "kind": "tool", + "topics": [ + "memory", + "sessions" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "showagent", + "type": "projects", + "displayName": "showagent", + "repoUrl": "https://github.com/aytzey/showagent", + "tagline": "Browse OpenCode history and copy conversation messages between coding agents.", + "description": "A terminal picker, CLI, and MCP server for local coding-agent sessions. Browse OpenCode sessions alongside Codex, Claude Code, Gemini CLI, jcode, and Pi; preview message transfers and create new native sessions. OpenCode operations use the installed OpenCode CLI. Transfers preserve original sessions and copy extracted user and assistant messages, excluding tool and runtime state.", + "kind": "mcp-server", + "topics": [ + "sessions" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "solenta", + "type": "projects", + "displayName": "Solenta", + "repoUrl": "https://github.com/currentbits/solenta", + "tagline": "Desktop app for OpenCode and other coding agents with one shared local memory", + "description": "A local-first desktop app (macOS, Windows, Linux) that runs OpenCode, Claude Code, Codex, Cursor, Kimi and Grok threads in git worktrees. A local memory server is injected into every session over MCP, so what one thread learns the next one knows; the plan is your GitHub issues, with Git review, terminal and browser panes, and verify-gated completion.", + "kind": "client", + "topics": [ + "memory" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "specralph", + "type": "projects", + "displayName": "SpecRalph", + "repoUrl": "https://github.com/iyaki/specralph", + "tagline": "Spec-Driven Ralph-Wiggum AI coding automation CLI", + "description": "AI Loops runner for OpenCode and other agent CLIs. Enables spec-driven development workflows with structured prompt engineering and loop automation for AI coding agents.", + "kind": "tool", + "topics": [ + "workflow" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "springbrand", + "type": "projects", + "displayName": "SpringBrand", + "repoUrl": "https://github.com/springbrand-lab/springbrand-agent-setup", + "tagline": "Remote MCP server with go-to-market tools for agents", + "description": "Hosted remote MCP server that gives OpenCode go-to-market tools: social\nlistening, traffic and SEO research, lead discovery, and creator discovery.\n\nExposes five tools — search_tools, get_tool_schemas, execute_tools,\nmanage_connections, and get_execution — so the agent discovers and calls\ncapabilities on demand instead of loading every tool schema into context.\n\nTransport is Streamable HTTP. Auth is OAuth 2.1 with Dynamic Client\nRegistration (RFC 7591) and PKCE, which OpenCode handles automatically on the\nfirst 401, so no API key goes in the config file.", + "kind": "mcp-server", + "topics": [ + "domain" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "mcp", + "remote-mcp", + "oauth", + "seo", + "social-listening", + "lead-generation" + ], + "homepageUrl": "https://springbrand.ai", + "installation": "Add the server to `opencode.json` (project) or\n`~/.config/opencode/opencode.json` (global):\n\n```json\n{\n \"$schema\": \"https://opencode.ai/config.json\",\n \"mcp\": {\n \"springbrand\": {\n \"type\": \"remote\",\n \"url\": \"https://connector.springbrand.ai/mcp\",\n \"enabled\": true\n }\n }\n}\n```\n\nNo `headers` entry is needed. The server answers unauthenticated requests\nwith `401` plus a `WWW-Authenticate` challenge, so OpenCode starts its OAuth\nflow on first use. To trigger it manually:\n\n```bash\nopencode mcp auth springbrand\n```\n" + }, + { + "productId": "squirrelscan", + "type": "projects", + "displayName": "squirrelscan", + "repoUrl": "https://github.com/squirrelscan/squirrelscan", + "tagline": "Website audit CLI, MCP server and skill for coding agents (SEO, performance, security, accessibility)", + "description": "CLI website audit tool built for coding agents. Runs 260+ rules across SEO, performance, security, accessibility and agent experience, and hands the agent exact, source-mapped fixes. Works with OpenCode via MCP (hosted https://mcp.squirrelscan.com/mcp with OAuth, or local `squirrel mcp` over stdio) to run audits, read reports and fix findings, or via the agent-skills format with `npx skills add squirrelscan/squirrelscan`. Free local audits, GitHub Action, MIT CLI and rules.", + "kind": "tool", + "also": [ + "mcp-server" + ], + "topics": [ + "code-quality", + "web" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "mcp", + "skills", + "seo", + "audit", + "accessibility", + "performance" + ], + "homepageUrl": "https://squirrelscan.com", + "installation": "curl -fsSL https://squirrelscan.com/install.sh | bash\nnpx skills add squirrelscan/squirrelscan\n" + }, + { + "productId": "stacktree", + "type": "projects", + "displayName": "Stacktree", + "repoUrl": "https://github.com/stevysmith/stacktree-skill", + "tagline": "Publish HTML from your agent to a private, unguessable link", + "description": "Turns HTML an agent produced into a link a person can open — a report, a dashboard, a brief. Links are unguessable and uncrawlable by default, with an optional passcode and expiry, and republishing replaces the page in place so a shared URL stays current. Connects as a local MCP server, and the skill is fetchable over HTTP so it stays current without reinstalling. Free anonymous pages need no account at all; agents with a wallet can pay per page over x402 instead of signing up.", + "kind": "mcp-server", + "topics": [ + "integrations" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "mcp", + "skills", + "hosting", + "publishing", + "html", + "sharing", + "x402" + ], + "homepageUrl": "https://stacktr.ee/agents", + "installation": "Skill over HTTP (always current, no install):\n\n```json\n{ \"skills\": { \"urls\": [\"https://stacktr.ee/.well-known/skills/\"] } }\n```\n\nMCP server (adds publish/update tools):\n\n```json\n{\n \"mcp\": {\n \"stacktree\": {\n \"type\": \"local\",\n \"command\": [\"npx\", \"-y\", \"stacktree-mcp\"],\n \"enabled\": true,\n \"environment\": { \"STACKTREE_API_KEY\": \"{env:STACKTREE_API_KEY}\" }\n }\n }\n}\n```\n\nOr run `npx stacktree-install` and pick OpenCode, which writes both.\n" + }, + { + "productId": "staffetta", + "type": "projects", + "displayName": "staffetta", + "repoUrl": "https://github.com/RaffaeleSpezia/staffetta", + "tagline": "Model-decided context handoff: close a milestone, write memory to disk, restart with a clean session", + "description": "A relay-race alternative to compaction for long-running agents. Instead of a threshold rewriting the conversation in place, the agent itself decides when a milestone is closed, writes what the next session needs to disk, and hands over — the session ends and a fresh one picks up the baton. Memory lives in files (MEMORY.md overwritten, JOURNAL.md append-only, AGENTS.md for rules), so it is readable, diffable, correctable and survives the session. Four tools the agent calls itself: checkpoint (verifies by checksum that memory actually changed, rejects journal entries with no numbers in them, detects tampering with older entries), ask (pauses for a human decision, requires the agent to state what it would do without an answer), resume (refuses until the decision is written down), and loop (reopens the session and nothing else — it ends when the model declares --done or --blocked, not when a counter infers it). Measured on a local KAT-Coder V2.5 via llama.cpp: 7 milestones closed autonomously, 7 of 7 checkpoints invoked unprompted, 587 tests green, ~5,500 tokens of context per round instead of a compacted session restarting from 142,000 — and it does not grow across rounds. Pure bash, no dependencies; adapters/opencode/loop.sh is the opencode adapter and everything under core/ works with any agent that can run a shell command.", + "kind": "tool", + "topics": [ + "context", + "memory" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "context-management", + "memory", + "long-running-agents", + "autonomous-agents", + "handoff", + "bash" + ] + }, { "productId": "supamem", "type": "projects", @@ -2618,6 +9170,31 @@ "repoUrl": "https://github.com/dzmitrys-dev/supamem/", "tagline": "Project-agnostic dual-memory MCP CLI for OpenCode", "description": "Adds semantic memory (Qdrant tuned hybrid retrieval — RRF fusion of dense MiniLM + sparse BM25) and structural memory hooks to OpenCode via MCP. Ships an installer that wires `qdrant-find` / `qdrant-store` tools and a snapshot hook into your project's OpenCode config. Python 3.12+, MIT, on PyPI as `supamem`.", + "kind": "tool", + "also": [ + "mcp-server" + ], + "topics": [ + "memory" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "superlocalmemory", + "type": "projects", + "displayName": "SuperLocalMemory", + "repoUrl": "https://github.com/qualixar/superlocalmemory", + "tagline": "The governed memory brain for every AI agent. It lives on your machine.", + "description": "Local-first memory for AI agents, added to OpenCode as an MCP server in opencode.json. It recalls what was saved, keeps it true over time, and answers that it does not have the answer instead of guessing.", + "kind": "mcp-server", + "topics": [ + "memory" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2630,6 +9207,11 @@ "repoUrl": "https://github.com/swarmclawai/swarmclaw", "tagline": "Self-hosted multi-agent runtime with first-class OpenCode delegation", "description": "Self-hosted runtime for autonomous AI agents with heartbeats, schedules, delegation, memory, runtime skills, and reviewed conversation-to-skill learning. Orchestrates OpenCode alongside Claude Code, Codex, Gemini CLI, Copilot CLI, Cursor Agent, Goose, Qwen Code, Droid, and 20+ LLM providers. Ships as an Electron desktop app, CLI, and Docker image. MCP-native (server and client). MIT, TypeScript.", + "kind": "tool", + "topics": [ + "orchestration" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2642,11 +9224,68 @@ "repoUrl": "https://github.com/swarmclawai/swarmvault", "tagline": "Local-first RAG knowledge base compiler with bundled skill and MCP server", "description": "Turns raw docs, research, and code into a persistent markdown wiki, knowledge graph, and hybrid SQLite FTS + embeddings search. Ships a bundled skill (schema-first, graph-query-first conventions) and an MCP server, so it works with OpenCode, Claude Code, and Codex. Offline heuristic provider by default; optional Ollama for local embeddings.", + "kind": "tool", + "also": [ + "mcp-server" + ], + "topics": [ + "docs", + "memory" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "swe-mux", + "type": "projects", + "displayName": "swe-mux", + "repoUrl": "https://github.com/jatoran/swe-mux", + "tagline": "Run OpenCode sessions side by side with a status each, and on your phone over Tailscale", + "description": "Terminal multiplexer for coding agents. Runs OpenCode (plus Claude Code, Codex and pi) in real terminals on your own machine, shows which session is waiting on you, and serves the same live sessions to your phone over your own Tailscale network. Sessions survive app restarts and updates.", + "kind": "client", + "topics": [ + "sessions", + "remote" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [], + "homepageUrl": "https://swemux.dev" + }, + { + "productId": "telegramcode", + "type": "projects", + "displayName": "TelegramCode", + "repoUrl": "https://github.com/olosegres/charness", + "tagline": "Telegram bot for OpenCode and Claude Code, run coding agents from your phone", + "description": "Run your coding agents on your own machine or VPS and drive them from Telegram, by voice or text. Each forum topic is its own project session, like terminal tabs on your phone. Self-hosted, no open ports, MIT.", + "kind": "client", + "topics": [ + "remote", + "voice" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "telegram", + "telegram-bot", + "coding-agent", + "opencode", + "claude-code", + "self-hosted", + "voice", + "vps", + "mobile", + "remote-development" + ] + }, { "productId": "tokscale", "type": "projects", @@ -2654,6 +9293,90 @@ "repoUrl": "https://github.com/junhoyeo/tokscale", "tagline": "Token usage tracking CLI", "description": "A CLI tool for tracking token usage from OpenCode and other coding agents (Claude Code, Codex, Gemini CLI, and Cursor IDE).", + "kind": "tool", + "topics": [ + "cost" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "tree-ring-memory", + "type": "projects", + "displayName": "Tree Ring Memory", + "repoUrl": "https://github.com/TerminallyLazy/Tree-Ring-Memory", + "tagline": "Local-first memory lifecycle CLI for AI agents", + "description": "Rust-native memory lifecycle layer for AI agents with project-scoped SQLite/FTS recall, forgetting, audit, consolidation, DOX/Revolve sync adapters, terminal TUI, and agent-framework discovery for OpenCode-style workflows.", + "kind": "tool", + "topics": [ + "memory" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "memory", + "local-first", + "cli", + "rust", + "opencode", + "ai-agents" + ], + "homepageUrl": "https://terminallylazy.github.io/Tree-Ring-Memory/", + "installation": "Install globally:\n```bash\ncurl -fsSL https://raw.githubusercontent.com/TerminallyLazy/Tree-Ring-Memory/main/install.sh | sh\n```\n\nInitialize project-local memory:\n```bash\ntree-ring init\ntree-ring integrations scan --source-root .\n```\n" + }, + { + "productId": "trustless", + "type": "projects", + "displayName": "trustless", + "repoUrl": "https://github.com/ikkun1222/trustless", + "tagline": "Credential broker CLI — injects secrets into subprocesses and proxies so AI agents never see plaintext keys", + "description": "trustless decouples AI agents from credentials. Agents reference secrets by name; the broker resolves them at the process or transport layer with output sanitization, integrated DLP (outbound redaction), OAuth token refresh, structured audit logs, and pass/Bitwarden backends. Zero-dependency single binary with bundled agent skills for OpenCode, Claude Code, Codex, and Hermes.", + "kind": "tool", + "topics": [ + "security" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "uizze", + "type": "projects", + "displayName": "UIZZE", + "repoUrl": "https://github.com/uizze/uizze", + "tagline": "UI quality workflow for OpenCode with an optional authenticated MCP", + "description": "Help OpenCode avoid generic UI with a free anti-UI-slop Agent Skill and an optional authenticated UIZZE MCP for focused UI references from 800,000+ real web and iOS screens.", + "kind": "skill", + "topics": [ + "code-quality", + "ui" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "universal-agent-plugins", + "type": "projects", + "displayName": "Universal Agent Plugins", + "repoUrl": "https://github.com/777genius/universal-agent-plugins", + "tagline": "Manage Agent Plugins across OpenCode and other AI coding agents", + "description": "A cross-platform CLI for installing, updating, repairing, and removing Agent Plugins 1.0 across OpenCode, Codex, Claude Code, Cursor, Gemini CLI, and other compatible agents. It also includes tools and an SDK for building portable plugins.", + "kind": "tool", + "topics": [ + "environment" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2665,7 +9388,12 @@ "displayName": "Universal LLM API Proxy", "repoUrl": "https://github.com/Mirrowel/LLM-API-Key-Proxy", "tagline": "Universal multi-model proxy and library - made with Opencode community", - "description": "Universal LLM Gateway: One API, every LLM. OpenAI/Anthropic-compatible endpoints with multi-provider translation and intelligent load-balancing. Works with any application that supports custom OpenAI/Anthropic base URLs—no code changes required in your existing tools. Best support for Antigravity/Gemini CLI out of the competition. Deploy anywhere. Opencode Discord discussion", + "description": "Universal LLM Gateway: One API, every LLM. OpenAI/Anthropic-compatible endpoints with multi-provider translation and intelligent load-balancing. Works with any application that supports custom OpenAI/Anthropic base URLs—no code changes required in your existing tools. Best support for Antigravity/Gemini CLI out of the competition. Deploy anywhere.", + "kind": "tool", + "topics": [ + "providers" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2687,6 +9415,12 @@ "repoUrl": "https://github.com/mbenhard/unship", "tagline": "Compare AI-made UI variants locally", "description": "Local CLI and browser picker for comparing temporary UI variants created by coding agents like OpenCode, then keeping one and cleaning up the rest.", + "kind": "tool", + "topics": [ + "ui", + "code-quality" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2699,6 +9433,11 @@ "repoUrl": "https://github.com/samvallad33/vestige", "tagline": "Local persistent memory for OpenCode agents", "description": "Adds local and project-scoped MCP memory to OpenCode, so agents can remember decisions, preferences, architecture context, and previous fixes across sessions.", + "kind": "tool", + "topics": [ + "memory" + ], + "compat": "n/a", "scope": [ "global", "project" @@ -2721,11 +9460,104 @@ "repoUrl": "https://github.com/BloopAI/vibe-kanban", "tagline": "Manage AI in parallel", "description": "A Kanban board to manage and orchestrate AI coding agents in parallel.", + "kind": "client", + "topics": [ + "orchestration", + "workflow" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "vsc-opencode-gui", + "type": "projects", + "displayName": "VSC OpenCode GUI", + "repoUrl": "https://github.com/chinese-room-solutions/vsc-opencode-gui", + "tagline": "The opencode agent, native in VS Code - chat in an editor tab instead of a terminal", + "description": "A VS Code extension that runs the opencode agent in an editor tab with command-palette parity and full theme sync. It spawns a headless `opencode serve` and drives it with its own webview UI over HTTP/SSE - feature parity with the opencode app, without leaving the editor.", + "kind": "client", + "topics": [ + "ui", + "environment" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "vscode", + "extension", + "gui", + "chat" + ], + "installation": "Install from the VS Code Marketplace (search \"VSC OpenCode GUI\"), or download\nthe latest `.vsix` from GitHub releases and run\n`code --install-extension vsc-opencode-gui-.vsix`.\nRequires the `opencode` CLI on PATH.\n" + }, + { + "productId": "wuniq", + "type": "projects", + "displayName": "Wuniq", + "repoUrl": "https://github.com/Wuniq/wuniq-mcp", + "tagline": "Local-first structured project memory for OpenCode through MCP", + "description": "Connects OpenCode to the free Wuniq desktop app through @wuniq/mcp. Wuniq keeps decisions, constraints, intent, and human reasoning in .wuniq files beside project files, then exposes progressive read and sync tools to the model. The public repository includes a validated opencode.json setup and AGENTS.md workflow. No account, cloud storage, or telemetry.", + "kind": "mcp-server", + "topics": [ + "memory" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "yoink", + "type": "projects", + "displayName": "yoink", + "repoUrl": "https://github.com/MajidRaimi/yoink", + "tagline": "Connect an API-key provider to opencode and 12 other coding harnesses, and switch AI coding logins", + "description": "CLI and macOS menu bar app. Add a provider once (OpenAI, Kimi Code, Moonshot, OpenRouter, DeepSeek, z.ai, Ollama or any OpenAI- or Anthropic-compatible base URL), pick its models, and tick opencode; yoink writes the provider into ~/.config/opencode/opencode.json (or opencode.jsonc, edited in place), alongside pi, codex, Claude Code, Qwen Code, Kilo Code, Droid and others. It also saves and switches Claude Code, ChatGPT (Codex), Kimi Code, Gemini and GitHub Copilot logins.", + "kind": "tool", + "topics": [ + "providers" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "providers", + "cli" + ] + }, + { + "productId": "ai-agent-automations", + "type": "resources", + "displayName": "AI Agent Automations", + "repoUrl": "https://github.com/ChmaraX/ai-agent-automations", + "tagline": "Automation prompts for OpenCode, Codex, Claude Code, and Cursor workflows", + "description": "A curated collection of agent automation prompts for real-world engineering and operations workflows. Covers OpenCode, Codex, Claude Code, and Cursor patterns for code maintenance, security reviews, research, support, billing, and work triage.", + "kind": "config", + "topics": [ + "prompting", + "workflow" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "automations", + "prompts", + "workflows", + "codex", + "claude-code", + "cursor" + ], + "homepageUrl": "https://trigger.tools" + }, { "productId": "akephalos", "type": "resources", @@ -2733,6 +9565,12 @@ "repoUrl": "https://github.com/sunnja69/akephalos", "tagline": "Local-first markdown passport for portable agent context and memory", "description": "A local-first, markdown-first `.akephalos` passport for portable agent preferences, tool notes, rules, project context, and durable memories. It uses plain files and Git so MCP-capable coding-agent workflows can inspect and carry context across tools and machines without hosted sync.", + "kind": "tool", + "topics": [ + "memory", + "context" + ], + "compat": "n/a", "scope": [ "project" ], @@ -2744,6 +9582,46 @@ "markdown" ] }, + { + "productId": "baizhi-agent-toolkit", + "type": "resources", + "displayName": "Baizhi Cloud Agent Toolkit", + "repoUrl": "https://github.com/chaitin/baizhi-agent-toolkit", + "tagline": "Remote web search and page extraction MCP for OpenCode agents", + "description": "For OpenCode V2, configure a remote MCP server at https://agent-toolkit.app.baizhi.cloud/mcp with oauth disabled and Authorization: Bearer {env:BAIZHI_API_KEY}. It offers web search, page reading, and structured extraction. The linked MIT repository publishes integration configuration and documentation, not the hosted backend. Users need their own Baizhi account and API key; calls may consume paid credits.", + "kind": "mcp-server", + "topics": [ + "remote", + "web" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "mcp-server", + "web-search", + "web-extraction" + ], + "installation": "For OpenCode V2, set BAIZHI_API_KEY in the OpenCode process environment and\nadd this server to opencode.jsonc. Keep the key out of the config file:\n\n{\n \"mcp\": {\n \"servers\": {\n \"baizhi\": {\n \"type\": \"remote\",\n \"url\": \"https://agent-toolkit.app.baizhi.cloud/mcp\",\n \"oauth\": false,\n \"headers\": {\n \"Authorization\": \"Bearer {env:BAIZHI_API_KEY}\"\n }\n }\n }\n }\n}\n\nRun `opencode mcp list` to check the connection before using any tools.\n" + }, + { + "productId": "claude-skills-pro", + "type": "resources", + "displayName": "Claude Skills Pro", + "repoUrl": "https://github.com/Hahaknight/claude-skills-pro", + "tagline": "15 battle-tested engineering skills (review, testing, debugging, security) that install into OpenCode in one command.", + "description": "A pack of 15 expert-workflow skills - seven-dimension code review, root-cause debugging, tests that catch real bugs, feature specs, security audit, safe refactoring, API design, zero-downtime migrations and more. Each skill encodes trigger conditions, a step-by-step procedure, and hard anti-patterns, so the agent follows senior-engineer discipline automatically. 7 skills are free (MIT). Install into OpenCode via npx skills add Hahaknight/claude-skills-pro --agent opencode.", + "kind": "skill", + "topics": [ + "code-quality" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, { "productId": "coding-agent-orchestration", "type": "resources", @@ -2751,11 +9629,65 @@ "repoUrl": "https://github.com/evermeer/CodingAgentOrchestration", "tagline": "OpenCode Setup Guide / Orchestration", "description": "An opinionated but practical handbook that argues for treating AI coding tools as a composable, multi-agent system rather than a single assistant, and then walks through how to implement that mindset using OpenCode's CLI, configuration system, and ecosystem (agents, tools, skills, and plugins).", + "kind": "guide", + "topics": [ + "orchestration" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "cosmosmith", + "type": "resources", + "displayName": "Cosmosmith", + "repoUrl": "https://github.com/devnomad-byte/cosmosmith", + "tagline": "Multi-agent workflow initializer with OpenCode adapters", + "description": "Generates AGENTS.md, task.md, proposal/design templates, and adapters for OpenCode, Claude Code, Cursor, Copilot, and Trae so mixed-agent projects can share one governance layer and verification ledger.", + "kind": "config", + "topics": [ + "orchestration", + "workflow" + ], + "compat": "n/a", + "scope": [ + "project" + ], + "tags": [ + "agents-md", + "workflow", + "governance", + "adapters", + "task-ledger" + ], + "installation": "```bash\nnpx cosmosmith@latest init --all\n```\n\nThe initializer creates OpenCode-compatible project guidance alongside AGENTS.md and other tool adapters.\n" + }, + { + "productId": "dataecho-skills", + "type": "resources", + "displayName": "DataEcho Skills", + "repoUrl": "https://github.com/mabuhalib/dataecho", + "tagline": "Deploy files, sites, and Dockerfile apps to live URLs + persistent agent memory, from opencode.", + "description": "Two zero-dependency Agent Skills for the DataEcho platform (dataecho.ai). `dataecho` publishes anything the agent builds — a single file, a static site, or a server-side app via Dockerfile — to a live URL in seconds, with anonymous publishing (24h claim flow), incremental deploys, and private cloud Drives with scoped share tokens. `dataecho-memory` gives the agent durable memory across sessions and machines — an indexed fact store on a private versioned drive with atomic concurrent-safe writes, history/restore, and one-command handoff. Install with `npx skills add mohocp/dataecho`; opencode discovers them via its standard skill paths. Also available as an MCP server (https://dataecho.ai/mcp).", + "kind": "skill", + "topics": [ + "integrations" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "skills", + "deploy", + "hosting", + "memory", + "mcp-server" + ] + }, { "productId": "debug-log-to-text-file", "type": "resources", @@ -2763,11 +9695,37 @@ "repoUrl": "https://github.com/awesome-opencode/awesome-opencode/discussions/19", "tagline": "Troubleshooting guide", "description": "How to output a debug log from opencode to a text file for troubleshooting.", + "kind": "guide", + "topics": [ + "docs" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "find-mcp", + "type": "resources", + "displayName": "Find MCP", + "repoUrl": "https://github.com/agentage/find-mcp", + "tagline": "Search 17,000+ MCP servers from the official MCP registry", + "description": "Find MCP is an MCP server for discovering other MCP servers. It searches the agentage MCP Catalog, which syncs 17,000+ servers from the official MCP registry (registry.modelcontextprotocol.io), through the mcp_search, mcp_get, and mcp_categories tools. Works with OpenCode as a generic MCP server, either remote over Streamable HTTP (https://catalog.agentage.io/mcp, no auth needed for search) or stdio via npx -y @agentage/find-mcp.", + "kind": "mcp-server", + "topics": [ + "integrations" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "mcp-server", + "discovery", + "registry" + ] + }, { "productId": "gotty", "type": "resources", @@ -2775,6 +9733,77 @@ "repoUrl": "https://github.com/sorenisanerd/gotty", "tagline": "Turn CLI into Web App", "description": "A simple command-line tool that turns your CLI tools, like opencode, into web applications.", + "kind": "tool", + "topics": [ + "remote", + "web" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "infer-client-examples", + "type": "resources", + "displayName": "Infer Client Examples", + "repoUrl": "https://github.com/tarunspandit/infer-client-examples", + "tagline": "OpenCode configurations for Infer's GPT-6 Astra and GPT-5.6 Sol models", + "description": "Configures Infer as a custom Responses API provider in OpenCode using an environment-based key. Includes Astra and Sol selectors, a standard-library Python client with an output-token cap, and offline tests. Live usage requires paid Infer wallet credit.", + "kind": "config", + "topics": [ + "providers" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "configuration", + "provider", + "responses-api" + ], + "homepageUrl": "https://infer.flow7.org/opencode" + }, + { + "productId": "jev-social", + "type": "resources", + "displayName": "Jev Social", + "repoUrl": "https://github.com/socai-io/jev-social", + "tagline": "Browser-grounded social research with Jev and the local socai CLI", + "description": "An OpenCode-compatible Agent Skill that routes an Instagram, TikTok, or LinkedIn research goal through Jev, runs read-only searches with the user's local socai CLI and existing browser session, and returns source-linked evidence plus a Markdown report. Requires Node 20+, a current socai CLI, a browser session, and either OpenRouter Jev or a local System One-compatible endpoint.", + "kind": "skill", + "topics": [ + "web", + "docs" + ], + "compat": "n/a", + "scope": [ + "project" + ], + "tags": [ + "agent-skill", + "social-research", + "browser-automation", + "jev" + ], + "installation": "npx skills add https://github.com/socai-io/jev-social/tree/v0.1.10/skills/jev-social --agent opencode" + }, + { + "productId": "juhe-skills", + "type": "resources", + "displayName": "Juhe Skills", + "repoUrl": "https://github.com/Boluo2101/juhe-skills", + "tagline": "Juhe MCP 深度调研与快速查询 skill 集", + "description": "提供两个 AI agent skill:juhe-deep-researcher(四档可选深度调研分析,支持轻量/标准/深度/旗舰)和 juhe-quick-researcher(快速全网资讯搜索)。配合 Juhe MCP 远程服务使用,支持 RSS 订阅源检索、文章全文获取、AI 摘要、趋势分析等功能。适用于 OpenCode、Claude Code、Cursor 等支持技能和 MCP 协议的编码 agent。", + "kind": "skill", + "topics": [ + "docs", + "web" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2787,11 +9816,127 @@ "repoUrl": "https://github.com/orionpax1997/kickstart.opencode", "tagline": "A heavily commented OpenCode starter config that teaches you what everything does.", "description": "Inspired by kickstart.nvim. A minimal, well-commented OpenCode configuration designed as a starting point, not a framework. Every decision is explained. Includes free-only models and MCPs, a plan/execute workflow with interview-style clarification, and a careful agent for supervised AI execution. Read it, understand it, make it yours.", + "kind": "config", + "topics": [ + "docs" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] }, + { + "productId": "looot-mcp-config", + "type": "resources", + "displayName": "looot MCP config", + "repoUrl": "https://github.com/loootai/looot-agent-integrations", + "tagline": "opencode.json snippet for the looot remote MCP server, 2,500+ data API endpoints", + "description": "A ready opencode.json block that adds the looot remote MCP server (https://api.looot.ai/mcp) with browser sign-in, plus a variant that reads a token from {env:LOOOT_TOKEN}. looot gives an agent one key and one prepaid balance for work-email lookup, enrichment, SERP, backlinks and web page data. The same repo has snippets for other agent platforms and a starter SKILL.md that opencode loads from .agents/skills.", + "kind": "config", + "topics": [ + "integrations" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "mcp-server", + "data", + "enrichment" + ] + }, + { + "productId": "lwc", + "type": "resources", + "displayName": "LWC", + "repoUrl": "https://github.com/JanYork/llm-wiki-cli", + "tagline": "Source-grounded project memory for OpenCode with an Agent Skill, CLI, and read-only MCP server", + "description": "Local-first project memory for coding agents with bounded recall, source citations, provenance, atomic changesets, and optional document and code graphs. Includes the installable using-lwc Agent Skill and a stdio MCP server exposing one bounded, read-only exploration tool.", + "kind": "mcp-server", + "topics": [ + "memory" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "agent-memory", + "agent-skills", + "mcp-server", + "knowledge-base" + ], + "installation": "## Agent Skill\n```bash\nnpx skills add JanYork/llm-wiki-cli --skill using-lwc\n```\n\n## CLI and MCP server\n```bash\nnpm install --global @i-xor/lwc\nlwc serve --mcp\n```\n" + }, + { + "productId": "meanwhile", + "type": "resources", + "displayName": "Meanwhile", + "repoUrl": "https://github.com/vaddisrinivas/meanwhile", + "tagline": "Optional human side quests while OpenCode continues long work", + "description": "A portable Agent Skill that offers one bounded, opt-in learning, recovery, play, or reality-check quest while the coding agent continues. It requires no account, callback, or completion tracking.", + "kind": "skill", + "topics": [ + "workflow" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "my-opencode-deepseek-config", + "type": "resources", + "displayName": "my-opencode-deepseek-config", + "repoUrl": "https://github.com/znlgis/my-opencode-deepseek-config", + "tagline": "Optimal DeepSeek V4 dual-model config — 11 agents, 15 skills, 25 commands", + "description": "A pure-config, zero-dependency OpenCode configuration optimized for DeepSeek V4 dual-model (Pro + Flash). Includes an orchestrator with 17 intent-gate patterns, delegation decision table, and cost-aware routing; 11 specialized subagents (planner, deep-worker, oracle, reviewer, consultant, ui-builder, explore, librarian, light-orchestrator, generalist); 15 on-demand skills (code-review, spec-workflow, deepwork, reflect, and more); and 25 slash commands. Designed for maximum token efficiency with model-isolated routing, background dispatch, read-only isolation for analysis agents, and execution-only discipline for worker agents. Iterated across 14 versions, continuously incorporating best practices from 6 upstream reference projects.", + "kind": "config", + "topics": [ + "providers", + "orchestration" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "config", + "deepseek", + "agents", + "skills", + "token-efficient" + ] + }, + { + "productId": "opencode-cn-guide", + "type": "resources", + "displayName": "OpenCode CN Deployment Guide", + "repoUrl": "https://github.com/lifugui-175/opencode-cn-guide", + "tagline": "Chinese free-tier multi-model deployment guide (DeepSeek/Kimi/Zhipu/SiliconFlow/OpenRouter) + MCP + CN network tips", + "description": "A practical Chinese-language guide for deploying OpenCode in mainland China on a budget. Covers a free-tier model matrix — DeepSeek V4 Flash for daily tasks, Kimi K2.x for coding, GLM-4-Flash / Qwen2.5-7B (permanently free) as fallback, plus OpenRouter free models — along with a ready-to-use opencode.example.json template, MCP (GitHub/ComfyUI) configuration, and mainland-China networking notes (npm mirror, proxy).", + "kind": "guide", + "topics": [ + "providers", + "docs" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "guide", + "config", + "free-tier", + "mcp", + "china" + ] + }, { "productId": "opencode-config-starter", "type": "resources", @@ -2799,6 +9944,112 @@ "repoUrl": "https://github.com/jjmartres/opencode", "tagline": "Flexible config starting point", "description": "A powerful custom opencode configuration with agents, commands, rules, skills, and pre-configured MCP server.", + "kind": "config", + "topics": [ + "docs" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-primer", + "type": "resources", + "displayName": "OpenCode Primer", + "repoUrl": "https://github.com/wesammustafa/opencode-primer", + "tagline": "Everything you need to know about OpenCode — a verified, release-tracked community guide.", + "description": "A community field guide that goes from first prompt to power use — setup, prompt engineering, custom commands, agent skills, plugins, custom agents, MCP servers, Zen and Go billing, TUI mastery, and headless CI. Ships a worked example .opencode/ directory (agents, commands, plugins, skills), seven drop-in specialist agent prompts, and MCP walkthroughs. Every version pin, price, and flag is verified against the current OpenCode release with a visible last-reviewed date.", + "kind": "guide", + "topics": [ + "docs" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-ultra-setup", + "type": "resources", + "displayName": "OpenCode Ultra Setup", + "repoUrl": "https://github.com/benogoulart/opencode-ultra-setup", + "tagline": "A full OpenCode setup with a team of 11 agents, persistent memory, context compression, and a real terminal.", + "description": "An \"ultra\" OpenCode setup combining oh-my-openagent (11 agents with team mode), supermemory (persistent memory), headroom (context compression up to ~57%), opencode-pty (interactive terminal), cited web search, and wakatime metrics. Includes Cortex and GitHub MCPs, an OmniRoute free AI gateway, and Karpathy + anti-slop guidelines in a global AGENTS.md.", + "kind": "config", + "topics": [ + "orchestration", + "memory" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "outagedeck-mcp", + "type": "resources", + "displayName": "OutageDeck MCP", + "repoUrl": "https://github.com/outagedeck/mcp", + "tagline": "Vendor-published cloud and SaaS outage checks for OpenCode agents", + "description": "OutageDeck gives OpenCode agents current provider status, incident timelines, and observed uptime history for cloud and SaaS vendors, based on their official status feeds. Its hosted remote MCP server connects without a package, daemon, account, or API key for public status checks, so an agent can rule out dependency outages before changing code.", + "kind": "mcp-server", + "topics": [ + "observability", + "integrations" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "mcp-server", + "incident-response", + "status-monitoring", + "devops" + ], + "homepageUrl": "https://outagedeck.com/developers/mcp?utm_source=awesome_opencode&utm_medium=directory&utm_campaign=opencode_mcp", + "installation": "Add the remote server to `opencode.json`:\n\n```json\n{\n \"$schema\": \"https://opencode.ai/config.json\",\n \"mcp\": {\n \"outagedeck\": {\n \"type\": \"remote\",\n \"url\": \"https://outagedeck.com/api/mcp\"\n }\n }\n}\n```\n\nThen ask OpenCode: `Check AWS, GitHub, and Cloudflare for active incidents before changing deployment code. use outagedeck`\n" + }, + { + "productId": "pixeltable-mcp", + "type": "resources", + "displayName": "Pixeltable Developer MCP", + "repoUrl": "https://github.com/pixeltable/mcp-server-pixeltable-developer", + "tagline": "Local MCP server for Pixeltable applications", + "description": "Local MCP server for Pixeltable, a multimodal data store with incremental computed columns and embedding search for agents.", + "kind": "mcp-server", + "topics": [ + "integrations", + "media" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "mcp-server", + "multimodal", + "database" + ] + }, + { + "productId": "repo-cover", + "type": "resources", + "displayName": "repo-cover", + "repoUrl": "https://github.com/sjh9714/cover-my-repo", + "tagline": "Agent skill that designs your GitHub social preview as one self-contained HTML file", + "description": "The agent writes a 1280x640 og:image card following a constrained design system, with four editorial moods, CJK-first typography, a deterministic checker for contrast and line breaking, and PNG export through headless Chrome. Installs into OpenCode via the Agent Skills CLI.", + "kind": "skill", + "topics": [ + "git", + "media" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2811,6 +10062,12 @@ "repoUrl": "https://github.com/runapi-ai/mcp", "tagline": "MCP server for model API jobs", "description": "RunAPI MCP lets coding agents discover models, check pricing, and create image, video, music/audio, text-to-speech, and LLM tasks through RunAPI.", + "kind": "mcp-server", + "topics": [ + "media", + "providers" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2820,6 +10077,57 @@ "media-generation" ] }, + { + "productId": "super-spec", + "type": "resources", + "displayName": "SuperSpec", + "repoUrl": "https://github.com/lbk-open/super-spec", + "tagline": "Requirement or production alert in, reviewed pull request out - 20 skills, one SKILL.md source", + "description": "A toolkit of 20 Agent Skills that combines the engineering discipline of superpowers with the living spec lifecycle of OpenSpec, and adds the two things neither has: end-to-end workflows that carry a requirement, or a production alert, all the way to a reviewed pull request, and multi-repo orchestration that runs one headless agent per repository. Implementation is dispatched to parallel test-driven subagents; a review panel with distinct lenses (quality, spec and guardrail compliance, cross-module integration) then returns a severity-graded verdict and drives a bounded fix loop until the code is approved. Root-cause analysis is evidence-based rather than a guess: competing hypotheses are falsified against logs, traces, metrics, code and git history before any fix is written. Capability specs follow the OpenSpec directory convention, so a repository initialized by the OpenSpec CLI works as-is. Nothing is written into your project - the guardrails are read in place at runtime, and there is no CLI or state machine to install.", + "kind": "skill", + "topics": [ + "workflow", + "code-quality" + ], + "compat": "n/a", + "scope": [ + "global", + "project" + ], + "tags": [ + "skills", + "workflow", + "code-review", + "tdd", + "multi-agent", + "openspec", + "spec-driven" + ] + }, + { + "productId": "tapetide-mcp", + "type": "resources", + "displayName": "Tapetide MCP", + "repoUrl": "https://github.com/Tapetide-hq/nse-bse-indian-stock-market-data-mcp", + "tagline": "Indian stock market data (NSE and BSE) for OpenCode agents", + "description": "MCP server that gives OpenCode structured Indian stock market data for about 8,200 NSE and BSE stocks, including quotes, quarterly financials, shareholding, a 326-ratio screener, FII/DII flows, option chains and company filings. Runs locally over stdio via npx with a free personal token, or remotely at https://mcp.tapetide.com/mcp with OAuth. MIT licensed, free plan available.", + "kind": "mcp-server", + "topics": [ + "domain" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [ + "mcp", + "finance", + "stocks", + "india" + ], + "homepageUrl": "https://tapetide.com/mcp", + "installation": "Add to opencode.json under \"mcp\":\n\"tapetide\": { \"type\": \"local\", \"command\": [\"npx\", \"-y\", \"tapetide-mcp\"], \"environment\": { \"TAPETIDE_TOKEN\": \"your_token_here\" } }\n" + }, { "productId": "ayu-dark", "type": "themes", @@ -2827,6 +10135,11 @@ "repoUrl": "https://github.com/postrednik/opencode-ayu-theme", "tagline": "Port of the popular Ayu Dark color scheme with golden yellow accent.", "description": "Port of the popular Ayu Dark color scheme with golden yellow accent.", + "kind": "theme", + "topics": [ + "ui" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2838,7 +10151,12 @@ "displayName": "Charcoal", "repoUrl": "https://github.com/VyomJain6904/charcoal-theme", "tagline": "Deep-black grayscale theme for OpenCode — no hues, all shades of gray", - "description": "Charcoal is a pure grayscale theme for OpenCode with a near-black (#0d0d0d) background.\nAll 56 theme color keys use shades of gray — no hues anywhere. Designed to match a\nminimal dark terminal aesthetic.\n\nAlso available for bat and Ghostty in the same repository.\n", + "description": "Charcoal is a pure grayscale theme for OpenCode with a near-black (#0d0d0d) background.\nAll 56 theme color keys use shades of gray — no hues anywhere. Designed to match a\nminimal dark terminal aesthetic.\n\nAlso available for bat and Ghostty in the same repository.", + "kind": "theme", + "topics": [ + "ui" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2848,9 +10166,32 @@ "productId": "lavi", "type": "themes", "displayName": "Lavi", - "repoUrl": "https://github.com/b0o/lavi/tree/main/contrib/opencode", + "repoUrl": "https://github.com/b0o/lavi", + "repoPath": "contrib/opencode", "tagline": "A soft and sweet colorscheme for Opencode and 15+ other apps", "description": "A soft, sweet dark theme for Opencode with rich purple tones and carefully tuned syntax and diff colors. Part of the Lavi colorscheme family, which also provides matching themes for Neovim, Alacritty, Ghostty, Kitty, Wezterm, Zellij, and other tools, with Nix flake and home-manager support.", + "kind": "theme", + "topics": [ + "ui" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "mimocode-theme", + "type": "themes", + "displayName": "MiMoCode Theme", + "repoUrl": "https://github.com/jadmadi/opencode-MiMoCode-Theme", + "tagline": "Warm dark/light OpenCode theme with signature orange accents.", + "description": "MiMoCode is a warm dark/light theme for OpenCode with signature orange accents, ported from the Zed MimoCode-theme. Dark mode uses warm-black surfaces, light mode uses warm cream surfaces.", + "kind": "theme", + "topics": [ + "ui" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2863,6 +10204,11 @@ "repoUrl": "https://github.com/brunogabriel/opencode-moonlight-theme", "tagline": "A moonlight color theme for OpenCode based on the popular moonlight-vscode-theme.", "description": "A moonlight color theme for OpenCode based on the popular moonlight-vscode-theme by atomiks. Features a dark, cool-toned palette inspired by moonlight aesthetics.", + "kind": "theme", + "topics": [ + "ui" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2875,6 +10221,28 @@ "repoUrl": "https://github.com/fatihtoprakk/opencode-light-themes", "tagline": "A curated collection of 21 light color themes for OpenCode", "description": "The largest collection of light themes for OpenCode. Includes 21 carefully crafted light themes converted from popular VS Code themes — scaefy-light (Atom One Light), Solarized Light, Vivid Light, Coffee Cream, GitHub Light, Quiet Light, Bluloco Light, Brackets Light Pro, NetBeans Light, Ysgrifennwr, Hop Light, GitHub Plus, Classic Light, HC Flurry, all Milkshake variants, and more. Bilingual (EN/TR) documentation and one-command install script included.", + "kind": "theme", + "topics": [ + "ui" + ], + "compat": "n/a", + "scope": [ + "global" + ], + "tags": [] + }, + { + "productId": "opencode-material-theme", + "type": "themes", + "displayName": "opencode-material-theme", + "repoUrl": "https://github.com/sandlada/opencode-material-theme", + "tagline": "Material Design 3 themes for the OpenCode TUI.", + "description": "Material Design 3 themes for the OpenCode TUI: 194 static JSON themes across 9 variants x 12 hues, plain + OLED.", + "kind": "theme", + "topics": [ + "ui" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2887,6 +10255,11 @@ "repoUrl": "https://github.com/regen45t/opencode-vscode-themes", "tagline": "Ports of all built-in VS Code themes (Modern, Plus, VS, High Contrast).", "description": "OpenCode ports of all built-in VS Code themes from the vscode.theme-defaults extension. Includes vscode-modern, vscode-plus, vscode-vs, and vscode-hc with automatic dark/light variant selection. One-line install script included.", + "kind": "theme", + "topics": [ + "ui" + ], + "compat": "n/a", "scope": [ "global" ], @@ -2899,9 +10272,14 @@ "repoUrl": "https://github.com/ajaxdude/opencode-ai-poimandres-theme", "tagline": "Poimandres theme", "description": "Poimandres theme for opencode.", + "kind": "theme", + "topics": [ + "ui" + ], + "compat": "n/a", "scope": [ "global" ], "tags": [] } -] \ No newline at end of file +] diff --git a/docs/archive/upstream-discussions.md b/docs/archive/upstream-discussions.md new file mode 100644 index 0000000..c97a2d3 --- /dev/null +++ b/docs/archive/upstream-discussions.md @@ -0,0 +1,1659 @@ +# Upstream GitHub Discussions Archive + +> **Notice**: This document preserves historical GitHub Discussions from [`awesome-opencode/awesome-opencode`](https://github.com/awesome-opencode/awesome-opencode/discussions) as part of the hard fork by Heretek-AI. + +Total Discussions Archived: **75** + +--- + +## Discussion #3: Welcome to awesome-opencode Discussions! + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/3](https://github.com/awesome-opencode/awesome-opencode/discussions/3) +- **Author**: [@ShamanicArts](https://github.com/ShamanicArts) +- **Created At**: `2025-09-22T01:15:26Z` +- **Category**: `Announcements` + +### Post Content + + +## 👋 Welcome! + We’re using Discussions as the main place to gather community suggestions for the awesome-opencode list. We hope that you: + * Suggest projects, themes, or plugins you'd like to see added. + * Propose new categories or improvements to the list's structure. + * Engage with other community members on their suggestions. + * Welcome others and are open-minded. Remember that this is a list we + build together 💪. + + To get started, feel free to open a new discussion with your suggestion, or comment below with an introduction of yourself! + + + +--- + +## Discussion #4: OpencCode Monitor + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/4](https://github.com/awesome-opencode/awesome-opencode/discussions/4) +- **Author**: [@ahosker](https://github.com/ahosker) +- **Created At**: `2025-09-22T15:18:35Z` +- **Category**: `Projects` + +### Post Content + +OpencCode Monitor is a CLI tool for monitoring and analysing OpenCode AI coding usage. + +https://github.com/Shlomob/ocmonitor-share + +### Comments (1) + +#### [@ShamanicArts](https://github.com/ShamanicArts) commented on `2025-09-22T15:47:02Z`: + +Great Suggestion! + +--- + +## Discussion #5: Gotty - Share OpenCode Terminal as a webpage + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/5](https://github.com/awesome-opencode/awesome-opencode/discussions/5) +- **Author**: [@ahosker](https://github.com/ahosker) +- **Created At**: `2025-09-22T15:21:27Z` +- **Category**: `Resources` + +### Post Content + +GoTTY is a simple command-line tool that turns your CLI tools, like OpenCode, into web applications. Allowing you to interact with Opencode via the web browser. + +https://github.com/sorenisanerd/gotty + +--- + +## Discussion #6: 👋 Seeking Contributors & Maintainers! + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/6](https://github.com/awesome-opencode/awesome-opencode/discussions/6) +- **Author**: [@ShamanicArts](https://github.com/ShamanicArts) +- **Created At**: `2025-09-22T16:05:12Z` +- **Category**: `Announcements` + +### Post Content + +As the `awesome-opencode` list begins to grow, we're looking for enthusiastic community members to help us maintain and expand this valuable resource. + +Our goal is to make this the go-to collection of the best plugins, themes, agents, and resources for the opencode community. To achieve that, we need a team of passionate individuals to help us keep the list organized, up-to-date, and full of high-quality projects. + +**What would you do as a contributor or maintainer?** +* Review new suggestions submitted in the Discussions. +* Add new, approved items to the list. +* Help organize the categories and ensure formatting is consistent. +* Share ideas on how to make this resource even better. + +No matter your experience level, your help would be incredibly valuable. Whether you can contribute a little or a lot, we'd love to have you on the team. + +**If you're interested in helping out, please comment below on this post to let us know!** + +Thanks for helping us build this community resource together! 💪 + +### Comments (2) + +#### [@ShamanicArts](https://github.com/ShamanicArts) commented on `2025-09-22T17:15:17Z`: + +@ahosker would you be interested in this role? let me know & will add to the organisation! + +#### [@shuv1337](https://github.com/shuv1337) commented on `2025-11-06T17:43:19Z`: + +I can help with this as well! + +--- + +## Discussion #7: awesome-claude-code-subagents + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/7](https://github.com/awesome-opencode/awesome-opencode/discussions/7) +- **Author**: [@ahosker](https://github.com/ahosker) +- **Created At**: `2025-09-22T16:34:06Z` +- **Category**: `Resources` + +### Post Content + +Comprehensive reference repository for production-ready `Claude Code` subagents. + +I haven't tested it, but it should be compatible with OpenCode SubAgents. + +https://github.com/VoltAgent/awesome-claude-code-subagents + +# See Also + +A set of OpenCode configurations, prompts, agents, and plugins for enhanced development workflows. + +https://github.com/darrenhinde/opencode-agents + +--- + +## Discussion #8: Codex Proxy Server + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/8](https://github.com/awesome-opencode/awesome-opencode/discussions/8) +- **Author**: [@ahosker](https://github.com/ahosker) +- **Created At**: `2025-09-22T16:36:36Z` +- **Category**: `Projects` + +### Post Content + +The Codex Proxy Server is a proxy server that provides a local API proxy for Codex/ChatGPT-like models,. It is designed to integrate seamlessly with Opencode and other compatible tools. + +https://github.com/unluckyjori/Codex-Proxy-Server + +## See Also + +Qwen OpenAI-Compatible Proxy Server + +https://github.com/aptdnfapt/qwen-code-oai-proxy + +## see also + +A FastAPI-based proxy server that converts the Gemini CLI tool into both OpenAI-compatible and native Gemini API endpoints. This allows you to leverage Google's free Gemini API quota through familiar OpenAI API interfaces or direct Gemini API calls. + +https://github.com/gzzhongqi/geminicli2api + +## See Also + +A proxy server that provides OpenAI/Gemini/Claude/Codex compatible API interfaces for CLI. + +https://github.com/router-for-me/CLIProxyAPI + +### Comments (1) + +#### [@ShamanicArts](https://github.com/ShamanicArts) commented on `2025-09-22T16:47:23Z`: + +Changing category to Projects. My thinking is that we should keep Plugins specifically for the opencode plugin format ( Projects that extend opencode functionality externally = Projects , Projects that extend opencode functionality via the plugin definition = Plugins ) + +--- + +## Discussion #9: Agentic + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/9](https://github.com/awesome-opencode/awesome-opencode/discussions/9) +- **Author**: [@ahosker](https://github.com/ahosker) +- **Created At**: `2025-09-22T16:40:14Z` +- **Category**: `Agents` + +### Post Content + +Modular AI agents and commands for structured software development with OpenCode. + +https://github.com/Cluster444/agentic + +### Comments (2) + +#### [@ShamanicArts](https://github.com/ShamanicArts) commented on `2025-09-22T16:49:45Z`: + +Placing this under the Agents category as it provides a collection of Agents & Commands + +#### [@theheavenlyhacker](https://github.com/theheavenlyhacker) commented on `2025-09-30T12:21:50Z`: + +Do you have a roadmap in studying Agentic AI? + +--- + +## Discussion #10: Opencode Google AI Search Plugin + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/10](https://github.com/awesome-opencode/awesome-opencode/discussions/10) +- **Author**: [@ahosker](https://github.com/ahosker) +- **Created At**: `2025-09-22T16:43:06Z` +- **Category**: `Plugin` + +### Post Content + +An Opencode plugin that exposes a native tool (google_ai_search_plus) for querying Google AI Mode (aka Google SGE). It uses Playwright to load the AI panel directly and converts the full response into markdown with Turndown so the output renders just like the built-in webfetch tool. + +[Opencode-Google-AI-Search-Plugin](https://github.com/IgorWarzocha/Opencode-Google-AI-Search-Plugin) + +--- + +## Discussion #11: occtx - OpenCode Context Switcher + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/11](https://github.com/awesome-opencode/awesome-opencode/discussions/11) +- **Author**: [@ahosker](https://github.com/ahosker) +- **Created At**: `2025-09-22T16:45:52Z` +- **Category**: `Projects` + +### Post Content + +occtx is a command-line tool for switching between different opencode contexts quickly and easily. Switch between Development, Staging and Production Contexts. + +https://github.com/hungthai1401/occtx + +--- + +## Discussion #12: OpenCode Context Analysis Plugin + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/12](https://github.com/awesome-opencode/awesome-opencode/discussions/12) +- **Author**: [@ahosker](https://github.com/ahosker) +- **Created At**: `2025-09-22T16:46:54Z` +- **Category**: `Plugin` + +### Post Content + +An OpenCode plugin that provides detailed token usage analysis for your AI sessions. Track and understand how tokens are distributed across system prompts, user messages, assistant responses, tool outputs, and reasoning traces. + +https://github.com/IgorWarzocha/Opencode-Context-Analysis-Plugin + +--- + +## Discussion #13: OpenCode Compatable MCP Voice Interface + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/13](https://github.com/awesome-opencode/awesome-opencode/discussions/13) +- **Author**: [@ahosker](https://github.com/ahosker) +- **Created At**: `2025-09-22T16:49:14Z` +- **Category**: `Projects` + +### Post Content + +Talk to AI assistants using your voice through a web browser. Compatible with Claude Desktop, OpenCode, and other MCP-enabled AI tools. + +https://github.com/shantur/mcp-voice-interface + +--- + +## Discussion #14: Simular Projects + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/14](https://github.com/awesome-opencode/awesome-opencode/discussions/14) +- **Author**: [@ahosker](https://github.com/ahosker) +- **Created At**: `2025-09-22T16:52:42Z` +- **Category**: `General` + +### Post Content + + +- https://github.com/hesreallyhim/awesome-claude-code +- https://github.com/LangGPT/awesome-claude-code +- https://github.com/pascalporedda/awesome-claude-code +- https://github.com/0xWelt/Awesome-Vibe-Coding + +For Inspiration + +### Comments (1) + +#### [@ShamanicArts](https://github.com/ShamanicArts) commented on `2025-09-22T17:27:30Z`: + +I especially like the table layout in https://github.com/LangGPT/awesome-claude-code. taking notes! + +--- + +## Discussion #15: opencode SDK + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/15](https://github.com/awesome-opencode/awesome-opencode/discussions/15) +- **Author**: [@ShamanicArts](https://github.com/ShamanicArts) +- **Created At**: `2025-09-22T17:21:06Z` +- **Category**: `Resources` + +### Post Content + +SDK for controlling opencode server programmatically + +https://github.com/sst/opencode-sdk-js +https://github.com/sst/opencode-sdk-go +https://github.com/sst/opencode-sdk-python + +### Comments (1) + +#### [@ShamanicArts](https://github.com/ShamanicArts) commented on `2025-09-22T17:46:01Z`: + +updated to new official resources category + +--- + +## Discussion #16: opencode.nvim + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/16](https://github.com/awesome-opencode/awesome-opencode/discussions/16) +- **Author**: [@nickjvandyke](https://github.com/nickjvandyke) +- **Created At**: `2025-09-22T19:38:33Z` +- **Category**: `Projects` + +### Post Content + +Neovim plugin for making convenient editor-aware prompts: https://github.com/NickvanDyke/opencode.nvim 🙂 + +### Comments (1) + +#### [@ShamanicArts](https://github.com/ShamanicArts) commented on `2025-09-22T20:09:11Z`: + +Added! + +--- + +## Discussion #17: Ring a Bell Example + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/17](https://github.com/awesome-opencode/awesome-opencode/discussions/17) +- **Author**: [@ahosker](https://github.com/ahosker) +- **Created At**: `2025-09-22T23:27:37Z` +- **Category**: `Plugin` + +### Post Content + +A simple plugin to ring a bell, once the request is complete. ([source](https://x.com/CarlosGtrz/status/1969623801240412281)) + +https://gist.github.com/ahosker/267f375a65378bcb9a867fd9a195db1e#file-opencode-terminal-bell-plugin-md + +--- + +## Discussion #18: Kimaki + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/18](https://github.com/awesome-opencode/awesome-opencode/discussions/18) +- **Author**: [@ahosker](https://github.com/ahosker) +- **Created At**: `2025-09-26T14:45:40Z` +- **Category**: `Projects` + +### Post Content + +Kimaki is a Discord bot you can install in a Discord server to control opencode sessions in any computer via Discord + +https://github.com/remorses/kimaki/ + +--- + +## Discussion #19: OpenCode Debug Log to Text FIle + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/19](https://github.com/awesome-opencode/awesome-opencode/discussions/19) +- **Author**: [@ahosker](https://github.com/ahosker) +- **Created At**: `2025-09-26T21:51:27Z` +- **Category**: `Resources` + +### Post Content + +To debug OpenCode, launch it with the following parameters. + +```bash +opencode --print-logs --log-level DEBUG 2> log_file.txt +``` + +This both launches OpenCode and outputs a log to `log_file.txt` in the current working directory. + +In addition, to find out where logs are stored on your system you can use: +```bash +opencode debug paths +``` + +--- + +## Discussion #20: Add interfaces / orchestrators for opencode as a category + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/20](https://github.com/awesome-opencode/awesome-opencode/discussions/20) +- **Author**: [@mex7xx](https://github.com/mex7xx) +- **Created At**: `2025-09-27T13:54:03Z` +- **Category**: `Agents` + +### Post Content + +one example: https://www.vibekanban.com/ + + +### Comments (1) + +#### [@ahosker](https://github.com/ahosker) commented on `2025-09-27T14:05:05Z`: + +I didnt know about Vibe Kanban, thats cool. + +--- + +## Discussion #21: openspec + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/21](https://github.com/awesome-opencode/awesome-opencode/discussions/21) +- **Author**: [@mex7xx](https://github.com/mex7xx) +- **Created At**: `2025-10-09T20:48:18Z` +- **Category**: `Projects` + +### Post Content + +openspec - spec driven development with opencode +https://github.com/Fission-AI/OpenSpec +openspec.dev + +### Comments (1) + +#### [@ShamanicArts](https://github.com/ShamanicArts) commented on `2025-10-14T02:43:22Z`: + +Great Shout! + +--- + +## Discussion #22: why is this repo not findable by google? + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/22](https://github.com/awesome-opencode/awesome-opencode/discussions/22) +- **Author**: [@mex7xx](https://github.com/mex7xx) +- **Created At**: `2025-10-15T10:41:03Z` +- **Category**: `General` + +### Post Content + +Am I the only one who can't find it on google search? +Google instead returns a lot of slop projects... + +### Comments (2) + +#### [@ahosker](https://github.com/ahosker) commented on `2025-10-15T11:36:05Z`: + +Is it three weeks old? Despite being discussed in the OpenCode Discrd, it likely has very little links to it on the OpenWeb. We should reach out to the Awsome Listing projects that list these kind of lists. + +#### [@ahosker](https://github.com/ahosker) commented on `2025-12-10T10:29:12Z`: + +Good News - OC has linked to the project here https://opencode.ai/docs/ecosystem/ + +--- + +## Discussion #23: opencode-skills + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/23](https://github.com/awesome-opencode/awesome-opencode/discussions/23) +- **Author**: [@whocaresthat](https://github.com/whocaresthat) +- **Created At**: `2025-10-20T23:05:47Z` +- **Category**: `Plugin` + +### Post Content + +https://github.com/malhashemi/opencode-skills + +### Comments (1) + +#### [@mex7xx](https://github.com/mex7xx) commented on `2025-10-28T18:56:22Z`: + +great find! I recently found: +https://github.com/numman-ali/openskills + +--- + +## Discussion #25: opencodeweb! + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/25](https://github.com/awesome-opencode/awesome-opencode/discussions/25) +- **Author**: [@shuv1337](https://github.com/shuv1337) +- **Created At**: `2025-10-29T19:28:18Z` +- **Category**: `Projects` + +### Post Content + +https://github.com/kcrommett/opencode-web + +--- + +## Discussion #26: easy text input via speech in opencode tui + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/26](https://github.com/awesome-opencode/awesome-opencode/discussions/26) +- **Author**: [@webboty](https://github.com/webboty) +- **Created At**: `2025-10-30T13:26:28Z` +- **Category**: `Projects` + +### Post Content + +One of the easiest solution to speak to the tui is this project: + +https://github.com/cjpais/Handy +https://handy.computer/ + +### Comments (1) + +#### [@ShamanicArts](https://github.com/ShamanicArts) commented on `2025-12-02T08:28:33Z`: + +this is amazing Ive been using it a ton! + +--- + +## Discussion #27: OpenCode Skills + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/27](https://github.com/awesome-opencode/awesome-opencode/discussions/27) +- **Author**: [@thoroc](https://github.com/thoroc) +- **Created At**: `2025-10-31T19:55:48Z` +- **Category**: `Plugin` + +### Post Content + +opencode-skills adds a similar functionality to Claude Skills: https://www.anthropic.com/news/skills + + +- https://github.com/malhashemi/opencode-skills + +### Comments (1) + +#### [@thoroc](https://github.com/thoroc) commented on `2025-10-31T19:58:54Z`: + +Already submitted in https://github.com/awesome-opencode/awesome-opencode/discussions/23 + +--- + +## Discussion #28: opencode-skills and opencode-sessions + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/28](https://github.com/awesome-opencode/awesome-opencode/discussions/28) +- **Author**: [@airtonix](https://github.com/airtonix) +- **Created At**: `2025-11-01T01:34:07Z` +- **Category**: `Projects` + +### Post Content + +- https://github.com/malhashemi/opencode-skills +- https://github.com/malhashemi/opencode-sessions + +--- + +## Discussion #29: WithContext + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/29](https://github.com/awesome-opencode/awesome-opencode/discussions/29) +- **Author**: [@boxpositron](https://github.com/boxpositron) +- **Created At**: `2025-11-04T00:00:15Z` +- **Category**: `Plugin` + +### Post Content + +With-Context MCP is a Model Context Protocol server that lets AI agents manage project-specific markdown notes by reading, writing, and organizing them within defined folders. It supports templates, batch edits, and ignore patterns for efficient context handling. An included OpenCode plugin can replicate its functionality locally, making it easy to use with or without the MCP server. + +https://github.com/boxpositron/with-context-mcp + +--- + +## Discussion #30: Notification plugin - Warcraft sounds + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/30](https://github.com/awesome-opencode/awesome-opencode/discussions/30) +- **Author**: [@thoroc](https://github.com/thoroc) +- **Created At**: `2025-11-06T08:31:05Z` +- **Category**: `Plugin` + +### Post Content + +A bit of self promo: https://github.com/pantheon-org/opencode-warcraft-notifications + +--- + +## Discussion #31: Plugin to ignore directory / file based on pattern + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/31](https://github.com/awesome-opencode/awesome-opencode/discussions/31) +- **Author**: [@thoroc](https://github.com/thoroc) +- **Created At**: `2025-11-06T08:38:05Z` +- **Category**: `Plugin` + +### Post Content + +Found on the Discord channel: https://github.com/lgladysz/opencode-ignore + +--- + +## Discussion #32: oc-manager - an opentui utility for managing opencode sessions/projects + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/32](https://github.com/awesome-opencode/awesome-opencode/discussions/32) +- **Author**: [@shuv1337](https://github.com/shuv1337) +- **Created At**: `2025-11-09T20:34:16Z` +- **Category**: `Projects` + +### Post Content + +https://github.com/kcrommett/oc-manager + +bunx opencode-manager + +--- + +## Discussion #33: Tokenscope, Comprehensive token usage analysis and cost tracking for opencode sessions. + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/33](https://github.com/awesome-opencode/awesome-opencode/discussions/33) +- **Author**: [@ramtinJ95](https://github.com/ramtinJ95) +- **Created At**: `2025-11-11T07:54:44Z` +- **Category**: `Plugin` + +### Post Content + +This plugin and command combo is for those that want to debug their token usage or see how much context a mcp eats up when adding a new one etc. There are some cost calculations also for people curios of how much their current session would have cost them if they where not on a sub etc, this is useful for finding the right monthly sub for your workflows! + +Repo: https://github.com/ramtinJ95/opencode-tokenscope + +--- + +## Discussion #34: ChatGPT subscription in OpenCode - opencode-openai-codex-auth + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/34](https://github.com/awesome-opencode/awesome-opencode/discussions/34) +- **Author**: [@lgladysz](https://github.com/lgladysz) +- **Created At**: `2025-11-11T09:44:57Z` +- **Category**: `Plugin` + +### Post Content + +Very good plugin allowing to use a ChatGPT subscription in OpenCode just like in Codex +https://github.com/numman-ali/opencode-openai-codex-auth + +--- + +## Discussion #35: plugin: OpenCode session + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/35](https://github.com/awesome-opencode/awesome-opencode/discussions/35) +- **Author**: [@thoroc](https://github.com/thoroc) +- **Created At**: `2025-11-14T08:05:45Z` +- **Category**: `Plugin` + +### Post Content + +https://github.com/malhashemi/opencode-sessions: Session management plugin for OpenCode with multi-agent collaboration support + +--- + +## Discussion #36: Poimandres Theme + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/36](https://github.com/awesome-opencode/awesome-opencode/discussions/36) +- **Author**: [@ajaxdude](https://github.com/ajaxdude) +- **Created At**: `2025-11-18T19:45:30Z` +- **Category**: `Themes` + +### Post Content + +Using opencode I made a Poimandres theme. Works and looks nice. https://github.com/ajaxdude/opencode-ai-poimandres-theme + +--- + +## Discussion #37: Roadmap plugin + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/37](https://github.com/awesome-opencode/awesome-opencode/discussions/37) +- **Author**: [@thoroc](https://github.com/thoroc) +- **Created At**: `2025-11-19T11:37:56Z` +- **Category**: `Plugin` + +### Post Content + +https://github.com/IgorWarzocha/Opencode-Roadmap + +--- + +## Discussion #38: OAuth authenticator for OpenAI + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/38](https://github.com/awesome-opencode/awesome-opencode/discussions/38) +- **Author**: [@andreagrandi](https://github.com/andreagrandi) +- **Created At**: `2025-11-21T14:35:45Z` +- **Category**: `Plugin` + +### Post Content + +OAuth authentication plugin for personal coding assistance with ChatGPT Plus/Pro subscriptions - uses OpenAI's official authentication method: https://github.com/open-hax/codex + +--- + +## Discussion #39: Gemini OAuth Plugin for Opencode + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/39](https://github.com/awesome-opencode/awesome-opencode/discussions/39) +- **Author**: [@andreagrandi](https://github.com/andreagrandi) +- **Created At**: `2025-11-21T14:37:28Z` +- **Category**: `Plugin` + +### Post Content + +Authenticate the Opencode CLI with your Google account so you can use your existing Gemini plan and its included quota instead of API billing: https://github.com/jenslys/opencode-gemini-auth + +--- + +## Discussion #44: Beads (steveyegge/beads) + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/44](https://github.com/awesome-opencode/awesome-opencode/discussions/44) +- **Author**: [@cau1k](https://github.com/cau1k) +- **Created At**: `2025-11-30T15:44:20Z` +- **Category**: `Projects` + +### Post Content + +Steve Yegge's project/task management system for agents + +https://github.com/steveyegge/beads + +also has an accompanying UI made by Dicklesworthstone https://github.com/Dicklesworthstone/beads_viewer + +### Comments (2) + +#### [@airtonix](https://github.com/airtonix) commented on `2025-12-09T03:55:04Z`: + +@ahosker Looks like this is already added + +#### [@ahosker](https://github.com/ahosker) commented on `2025-12-09T10:12:05Z`: + +Yes @airtonix . Thanks for this @cau1k. +This is already added under 'projects' by @ShamanicArts on [2 Dec](https://github.com/awesome-opencode/awesome-opencode/commit/9b2174aec28c98ff33ae9f76002f3c3c7eb1b4a4). I have changed the label. + +--- + +## Discussion #46: DDEV Plugin + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/46](https://github.com/awesome-opencode/awesome-opencode/discussions/46) +- **Author**: [@JUVOJustin](https://github.com/JUVOJustin) +- **Created At**: `2025-12-04T03:28:45Z` +- **Category**: `Plugin` + +### Post Content + +I would love if my opencode-ddev plugin could be added: https://github.com/JUVOJustin/opencode-ddev + +Basically a small tool to guide the llm and automatically scope commands to be executed within the containers of ddev + +### Comments (1) + +#### [@ahosker](https://github.com/ahosker) commented on `2025-12-04T10:57:32Z`: + +What an interesting idea - I ditched using Docker for Laravel/PHP development for this exact reason. +It would add a layer of confusion to AI's, getting confused with the commands. + +[Added](https://github.com/awesome-opencode/awesome-opencode/commit/a4ff0a0149e49f67739d4384fff3cdd88f3f8d28). + +--- + +## Discussion #47: opencode-plugin-template + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/47](https://github.com/awesome-opencode/awesome-opencode/discussions/47) +- **Author**: [@airtonix](https://github.com/airtonix) +- **Created At**: `2025-12-07T23:03:54Z` +- **Category**: `Plugin` + +### Post Content + +https://github.com/zenobi-us/opencode-plugin-template + +Focuses on providing the CICD setup with + +- generator script inspired by asdf.vm plugin template +- release please +- separate release management from publish. +- bun publish +- npm trusted publishing (no need to store PAT tokens) +- mise tasks (instead of ugly and annoying pkg.json#scripts) +- mise tooling (instead of old fashioned nvm) + + +--- + +## Discussion #48: swarm plugin + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/48](https://github.com/awesome-opencode/awesome-opencode/discussions/48) +- **Author**: [@mex7xx](https://github.com/mex7xx) +- **Created At**: `2025-12-08T17:44:38Z` +- **Category**: `Plugin` + +### Post Content + +https://github.com/joelhooks/opencode-swarm-plugin + +--- + +## Discussion #49: Opencode plugin to use models from antigravity + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/49](https://github.com/awesome-opencode/awesome-opencode/discussions/49) +- **Author**: [@NoeFabris](https://github.com/NoeFabris) +- **Created At**: `2025-12-10T13:26:34Z` +- **Category**: `Plugin` + +### Post Content + +Hey, inspired by the other plugins that allows to use gemini and codex models and account limits, I've created a plugin that allows you to log in with Antigravity (the Google IDE) and use Gemini 3 Pro High (as it's called in the IDE, though I'm not sure if it's different from the preview model) and even Anthropic models like Opus 4.5 and Sonnet 4.5 for free. + +https://github.com/NoeFabris/opencode-antigravity-auth + +--- + +## Discussion #50: New plugin: opencode-wakatime + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/50](https://github.com/awesome-opencode/awesome-opencode/discussions/50) +- **Author**: [@angristan](https://github.com/angristan) +- **Created At**: `2025-12-10T14:50:47Z` +- **Category**: `Plugin` + +### Post Content + +Hello! Would like to propose this new plugin: https://github.com/angristan/opencode-wakatime/ for https://wakatime.com/ :) + +--- + +## Discussion #51: Cupcake - Deterministic policy enforcement layer for AI coding agents + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/51](https://github.com/awesome-opencode/awesome-opencode/discussions/51) +- **Author**: [@captjt](https://github.com/captjt) +- **Created At**: `2025-12-11T15:12:13Z` +- **Category**: `Projects` + +### Post Content + +A native policy-layer for AI coding agents. Built on OPA/Rego. There's a native OpenCode plugin support with Cupcake. + +* [github.com/eqtylab/cupcake](https://github.com/eqtylab/cupcake) +* [cupcake.eqtylab.io](https://cupcake.eqtylab.io/) + + +--- + +## Discussion #53: opencode-optimal-model-temps + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/53](https://github.com/awesome-opencode/awesome-opencode/discussions/53) +- **Author**: [@Lyapsus](https://github.com/Lyapsus) +- **Created At**: `2025-12-12T21:34:35Z` +- **Category**: `Projects` + +### Post Content + +Minimal OpenCode plugin that hooks chat.params and nudges specific models to their preferred sampling temperature. Right now it only pinches Google Gemini 3 Pro to 0.35, following the recommendation in [Optimal Temperature for Gemini 3 Pro](https://lynchmark.com/blog/gemini-optimal-temperature). +https://github.com/Lyapsus/opencode-optimal-model-temps + +--- + +## Discussion #55: OpenChamber - GUI for OpenCode + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/55](https://github.com/awesome-opencode/awesome-opencode/discussions/55) +- **Author**: [@btriapitsyn](https://github.com/btriapitsyn) +- **Created At**: `2025-12-13T15:51:05Z` +- **Category**: `Projects` + +### Post Content + +OpenChamber - A fan-made web and desktop interface for OpenCode, featuring a VS Code extension for in-editor access. Supports multiple sessions, git worktrees managements, and all major OpenCode features. https://github.com/btriapitsyn/openchamber +chat_example + +### Comments (1) + +#### [@theblazehen](https://github.com/theblazehen) commented on `2025-12-14T08:32:03Z`: + +Great GUI! I like it. Might submit a couple PRs later + +--- + +## Discussion #56: Fork of opencode-antigravity-auth that allows using multiple accounts + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/56](https://github.com/awesome-opencode/awesome-opencode/discussions/56) +- **Author**: [@theblazehen](https://github.com/theblazehen) +- **Created At**: `2025-12-15T06:00:46Z` +- **Category**: `Plugin` + +### Post Content + +https://github.com/theblazehen/opencode-antigravity-multi-auth forks https://github.com/awesome-opencode/awesome-opencode/discussions/49 and adds functionality to add multiple google accounts. + +It automatically rotates between them when one gets rate limited + +--- + +## Discussion #57: Simple Memory + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/57](https://github.com/awesome-opencode/awesome-opencode/discussions/57) +- **Author**: [@cnicolov](https://github.com/cnicolov) +- **Created At**: `2025-12-15T17:17:01Z` +- **Category**: `Plugin` + +### Post Content + +Hello, I created a very simple plugin to manage memory inside a git repo that can be committed and reviewed by team members. + +It's easy to use and doesn't get in the way: + +https://github.com/cnicolov/opencode-plugin-simple-memory + + +--- + +## Discussion #59: Use Opencode + Zellij? Zellij Namer keeps your Zellij session name in sync with your work + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/59](https://github.com/awesome-opencode/awesome-opencode/discussions/59) +- **Author**: [@24601](https://github.com/24601) +- **Created At**: `2025-12-18T22:12:29Z` +- **Category**: `Plugin` + +### Post Content + +Confused about picking the right session out of all your randomly named ones? I was, so I wrote an auto session renamer w/Opencode. + +https://github.com/24601/opencode-zellij-namer + +--- + +## Discussion #61: My little collection of plugins: opencode-agent-memory, opencode-agent-skills, opencode-beads, and opencode-handoff + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/61](https://github.com/awesome-opencode/awesome-opencode/discussions/61) +- **Author**: [@joshuadavidthomas](https://github.com/joshuadavidthomas) +- **Created At**: `2025-12-19T21:19:45Z` +- **Category**: `Plugin` + +### Post Content + +I've been building a few plugins for OpenCode and wanted to share them in case they're useful to anyone else. + +[opencode-agent-memory](https://github.com/joshuadavidthomas/opencode-agent-memory) - Gives the agent persistent, self-editable memory blocks inspired by [Letta agents](https://letta.com). Basically `AGENTS.md` with a harness: structured blocks with metadata and prompts injected early into the context that encourages the agent to actively maintain its own memory, with a lot of eye-roll enducing philosophical framing in the prompts borrowed from Letta (and yet somehow it does seem to work!). + +[opencode-agent-skills](https://github.com/joshuadavidthomas/opencode-agent-skills) - Dynamic skills loader that discovers skills from project, user, and plugin directories. Compatible with existing Claude Code skills and optionally integrates with Superpowers (https://github.com/obra/superpowers). Different from [opencode-skills](https://github.com/malhashemi/opencode-skills) as it only has 4 tools for reading skills and executing skill scripts, whereas that plugin creates a tool per skill. + +[opencode-beads](https://github.com/joshuadavidthomas/opencode-beads) - Integration for [Steve Yegge's beads](https://github.com/steveyegge/beads) issue tracker. Injects beads context automatically on session start and after compaction, exposes `/bd-*` commands, and includes a task agent for autonomous issue completion. + +[opencode-handoff](https://github.com/joshuadavidthomas/opencode-handoff) - Creates focused handoff prompts for continuing work in a new session. Inspired by [Amp's `/handoff` command](https://ampcode.com/news/handoff). Generates a continuation prompt with relevant file references and opens a new session with it as an editable draft. + +### Comments (1) + +#### [@cnicolov](https://github.com/cnicolov) commented on `2025-12-20T06:25:39Z`: + +Good job! + +We built something similar internally, using very similar patterns, we have few scattered plugins. +Posted one of those here for validation https://github.com/awesome-opencode/awesome-opencode/discussions/57 + +I'm interested in working to build a more complete community driven solution + +--- + +## Discussion #64: tokscale + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/64](https://github.com/awesome-opencode/awesome-opencode/discussions/64) +- **Author**: [@cau1k](https://github.com/cau1k) +- **Created At**: `2025-12-23T04:26:47Z` +- **Category**: `General` + +### Post Content + +https://github.com/junhoyeo/tokscale visually pleasing tool to track all coding agent usage, but works with opencode. Launch OC only with `bunx tokscale --opencode` + +image + + + +### Comments (2) + +#### [@junhoyeo](https://github.com/junhoyeo) commented on `2025-12-25T02:11:02Z`: + +Hey @cau1k, thanks for opening this! Appreciate the support 🙏 + +#### [@junhoyeo](https://github.com/junhoyeo) commented on `2025-12-25T02:11:29Z`: + +Here's the info: + +- GitHub URL: https://github.com/junhoyeo/tokscale +- Category: `Projects` +- Description: A CLI tool for tracking token usage from OpenCode and other coding agents (Claude Code, Codex, Gemini CLI, and Cursor IDE) + +--- + +## Discussion #65: add UNMOJI plugin + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/65](https://github.com/awesome-opencode/awesome-opencode/discussions/65) +- **Author**: [@bastiangx](https://github.com/bastiangx) +- **Created At**: `2025-12-24T17:31:52Z` +- **Category**: `Plugin` + +### Post Content + +[UNMOJI](https://codeberg.org/bastiangx/opencode-unmoji) - A simple plugin that strips _ALL_ emojis from agent outputs in Opencode! + + +
+ +Hosted on Codeberg and has MIT License. +- [Repo link](https://codeberg.org/bastiangx/opencode-unmoji) +- [NPM link](https://www.npmjs.com/package/@bastiangx/opencode-unmoji) + +--- + +## Discussion #66: micode - Brainstorm → Plan → Implement workflow + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/66](https://github.com/awesome-opencode/awesome-opencode/discussions/66) +- **Author**: [@vtemian](https://github.com/vtemian) +- **Created At**: `2025-12-26T13:18:45Z` +- **Category**: `Plugin` + +### Post Content + +https://github.com/vtemian/micode + +a minimal plugin that uses /init -> brainstorm -> plan -> execute workflow. simple and affective + +parallel task execution, automatic code review, dependency-aware batching + +--- + +## Discussion #69: Ayu Dark Theme + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/69](https://github.com/awesome-opencode/awesome-opencode/discussions/69) +- **Author**: [@postrednik](https://github.com/postrednik) +- **Created At**: `2025-12-30T21:54:27Z` +- **Category**: `Themes` + +### Post Content + +## Ayu Dark Theme for OpenCode + +**Repository:** https://github.com/postrednik/opencode-ayu-theme + +**Description:** Port of the popular [Ayu Dark](https://github.com/ayu-theme/ayu-colors) color scheme for OpenCode. Features the signature golden yellow accent with warm, comfortable colors optimized for long coding sessions. + +### Preview + +![OpenCode Ayu Dark Preview](https://raw.githubusercontent.com/postrednik/opencode-ayu-theme/main/preview.svg) + +### Key Colors + +| Element | Color | Hex | +|---------|-------|-----| +| Background | 🟫 | `#0D1017` | +| Accent | 🟨 | `#E6B450` | +| Strings | 🟩 | `#AAD94C` | +| Functions | 🟧 | `#FFB454` | +| Types | 🟦 | `#59C2FF` | + +### Installation + +```bash +mkdir -p ~/.config/opencode/themes +curl -o ~/.config/opencode/themes/ayu-dark.json \ + https://raw.githubusercontent.com/postrednik/opencode-ayu-theme/main/.opencode/themes/ayu-dark.json +``` + +Then add to your `opencode.json`: +```json +{ + "theme": "ayu-dark" +} +``` + +### License + +MIT (same as original ayu-colors) + +--- + +## Discussion #71: Flexible starting point for opencode configuration + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/71](https://github.com/awesome-opencode/awesome-opencode/discussions/71) +- **Author**: [@jjmartres](https://github.com/jjmartres) +- **Created At**: `2026-01-04T12:27:51Z` +- **Category**: `Resources` + +### Post Content + +A powerful, custom opencode configuration, complete with a suite of agents, commands, rules, skills, and a pre-configured MCP server. It's designed to be a flexible starting point for you to build upon and adapt. + +[https://github.com/jjmartres/opencode](https://github.com/jjmartres/opencode) + +--- + +## Discussion #72: Add opencode-model-announcer + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/72](https://github.com/awesome-opencode/awesome-opencode/discussions/72) +- **Author**: [@ramarivera](https://github.com/ramarivera) +- **Created At**: `2026-01-04T15:38:52Z` +- **Category**: `Plugin` + +### Post Content + +[opencode-model-announcer](https://github.com/ramarivera/opencode-model-announcer) - Automatically injects the current model name into the chat context so the LLM is self-aware. + +🤖 *This content was generated with AI assistance using Gemini 3 Pro High (Antigravity).* +> **Note:** Ideally, the model identifying itself in this footer would match the one actually generating the content. This plugin makes that possible. + +--- + +## Discussion #73: OpenCode Froggy + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/73](https://github.com/awesome-opencode/awesome-opencode/discussions/73) +- **Author**: [@fdematos](https://github.com/fdematos) +- **Created At**: `2026-01-04T17:33:54Z` +- **Category**: `Plugin` + +### Post Content + +Plugin providing Claude Code–style hooks, specialized agents (doc-writer, code reviewer, architect, partner, etc.), dedicated commands such as simplify-code and review-pr, and tools such as gitingest. + +``` +hooks: + - event: session.idle + conditions: [hasCodeChange] + actions: + - bash: "npm run lint --fix" +``` + +[Github: OpenCode Froggy](https://github.com/smartfrog/opencode-froggy) + +--- + +## Discussion #75: opencode-ralph-wiggum - Iterative AI Development Loops + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/75](https://github.com/awesome-opencode/awesome-opencode/discussions/75) +- **Author**: [@Th0rgal](https://github.com/Th0rgal) +- **Created At**: `2026-01-06T08:56:20Z` +- **Category**: `Plugin` + +### Post Content + +## Plugin Submission: opencode-ralph-wiggum + +**Repository:** https://github.com/Th0rgal/opencode-ralph-wiggum + +**Description:** Ralph Wiggum technique for OpenCode - iterative AI development loops with self-correcting agents. Based on [ghuntley.com/ralph](https://ghuntley.com/ralph/). + +### What is Ralph? + +Ralph is a development methodology where an AI agent receives the **same prompt repeatedly** until it completes a task. Each iteration, the AI sees its previous work in files and git history, enabling self-correction and incremental progress. + +### Features + +- **CLI Loop** - External loop that calls `opencode run` repeatedly with auto-commits +- **Plugin Loop** - In-session continuation using OpenCode SDK events (`session.idle`) +- **Custom Tools** - `ralph_start`, `ralph_status`, `ralph_cancel` +- **Commands** - `/ralph-loop`, `/cancel-ralph`, `/help` +- **Completion Promises** - Detect task completion via `COMPLETE` tags + +### Quick Start + +```bash +ralph "Build a REST API with tests. Output COMPLETE when all tests pass." --max-iterations 20 +``` + +### Installation + +```bash +git clone https://github.com/Th0rgal/opencode-ralph-wiggum +cd opencode-ralph-wiggum +./install.sh +``` + +Built with Bun + TypeScript. MIT License. + +--- + +## Discussion #77: opencode-devcontainers - Devcontainer management with auto-assigned ports + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/77](https://github.com/awesome-opencode/awesome-opencode/discussions/77) +- **Author**: [@athal7](https://github.com/athal7) +- **Created At**: `2026-01-07T03:40:53Z` +- **Category**: `Plugin` + +### Post Content + +## opencode-devcontainers + +**Repository**: https://github.com/athal7/opencode-devcontainers +**npm**: `npm install -g opencode-devcontainers` + +### Description + +OpenCode plugin for running multiple devcontainer instances with auto-assigned ports and branch-based isolation. + +### Features + +- Creates shallow clones for each branch (fully self-contained) +- Auto-assigns ports from a configurable range (13000-13099) +- Generates ephemeral override configs (keeps devcontainer.json clean) +- Tracks active instances to avoid conflicts + +### Usage + +1. Add to your `opencode.json`: + ```json + { + "plugin": ["opencode-devcontainers"] + } + ``` + +2. Use the skill to manage devcontainers: + ``` + /skill opencode-devcontainers + ``` + +### Related + +Also see [opencode-pilot](https://github.com/athal7/opencode-pilot) for automation that polls for work and spawns sessions. + +--- + +## Discussion #78: opencode-pilot - Automation daemon for OpenCode + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/78](https://github.com/awesome-opencode/awesome-opencode/discussions/78) +- **Author**: [@athal7](https://github.com/athal7) +- **Created At**: `2026-01-07T04:08:58Z` +- **Category**: `Plugin` + +### Post Content + +## opencode-pilot + +**Repository**: https://github.com/athal7/opencode-pilot +**npm**: `npm install -g opencode-pilot` + +### Description + +Automation daemon for OpenCode that polls for work from GitHub issues, Linear tickets, and other sources, then spawns OpenCode sessions to work on them. + +### Features + +- **Polling automation** - Automatically start sessions from GitHub issues, PRs needing review, Linear tickets +- **Readiness evaluation** - Check labels, dependencies, and priority before starting work +- **Template-based prompts** - Customize prompts with placeholders for issue data +- **Built-in presets** - Common patterns like "my GitHub issues" work out of the box + +### Usage + +1. Add to your `opencode.json`: + ```json + { + "plugin": ["opencode-pilot"] + } + ``` + +2. Create config at `~/.config/opencode-pilot/config.yaml` + +3. The daemon auto-starts when OpenCode launches, or run manually: + ```bash + opencode-pilot start + ``` + +### Related + +Also see [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) for multi-branch devcontainer isolation. + +--- + +## Discussion #79: Move to PR first Contributions + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/79](https://github.com/awesome-opencode/awesome-opencode/discussions/79) +- **Author**: [@ShamanicArts](https://github.com/ShamanicArts) +- **Created At**: `2026-01-07T22:38:32Z` +- **Category**: `Announcements` + +### Post Content + +This is a motion to move to a PR first based contibution system , moving away from the present discussions based contribution system + +The discussions based system seemed like a good idea when I first set up the repo, I assumed it would allow space for maintainers to review contributions before accepting, but currently I feel it just adds a lot of extra friction. + +I am proposing we move to PR based system, where anyone can submit a PR & maintainers are responsible for vetting & accepting/declining those PRs . I am proposing we make this change 48 hours from now. + +this discussion is notice of the proposed changes & space for any feedback etc + +Much Love to everyone maintaining & contributing. + +BIG LOVE + +SHAMANIC + +### Comments (1) + +#### [@ahosker](https://github.com/ahosker) commented on `2026-01-07T23:04:36Z`: + +I think that would be best. + +--- + +## Discussion #83: Add 4 KDCO OpenCode plugins + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/83](https://github.com/awesome-opencode/awesome-opencode/discussions/83) +- **Author**: [@kdcokenny](https://github.com/kdcokenny) +- **Created At**: `2026-01-08T20:43:30Z` +- **Category**: `Plugin` + +### Post Content + +- [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) - Claude Code-style background agents with async delegation and context persistence. +- [opencode-notify](https://github.com/kdcokenny/opencode-notify) - Native OS notifications for OpenCode – know when tasks complete. +- [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) - Bundled multi-agent orchestration harness – 16 components, one install. +- [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) - Zero-friction git worktrees for OpenCode. Auto-spawns terminals, syncs files, cleans up on exit. + +--- + +## Discussion #84: Add OCX package manager + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/84](https://github.com/awesome-opencode/awesome-opencode/discussions/84) +- **Author**: [@kdcokenny](https://github.com/kdcokenny) +- **Created At**: `2026-01-08T20:43:53Z` +- **Category**: `Projects` + +### Post Content + +- [ocx](https://github.com/kdcokenny/ocx) - The missing package manager for OpenCode extensions – ShadCN model with Ghost Mode. + +--- + +## Discussion #87: cc-safety-net - Block destructive git and filesystem commands before they execute + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/87](https://github.com/awesome-opencode/awesome-opencode/discussions/87) +- **Author**: [@kenryu42](https://github.com/kenryu42) +- **Created At**: `2026-01-09T13:39:43Z` +- **Category**: `Plugin` + +### Post Content + +[`cc-safety-net`](https://github.com/kenryu42/claude-code-safety-net) - This plugin acts as a safety net for AI coding agents, catching destructive git and filesystem commands before they execute. + +### Installation + +**Option A: Let an LLM do it** + +Paste this into any LLM agent (Claude Code, OpenCode, Cursor, etc.): + +``` +Install the cc-safety-net plugin in `~/.config/opencode/opencode.json` (or `.jsonc`) according to the schema at: https://opencode.ai/config.json + +Then copy the following files to `~/.config/opencode/command/`: +- https://raw.githubusercontent.com/kenryu42/claude-code-safety-net/main/.opencode/command/set-custom-rules.md +- https://raw.githubusercontent.com/kenryu42/claude-code-safety-net/main/.opencode/command/verify-custom-rules.md +``` + +**Option B: Manual setup** + +1. **Add the plugin to your config** `~/.config/opencode/opencode.json` (or `.jsonc`): + + ```json + { + "plugin": ["cc-safety-net"] + } + ``` + +2. **Copy the [commands](https://github.com/kenryu42/claude-code-safety-net/tree/main/.opencode/command) to `~/.config/opencode/command/`** + + +--- + +## Discussion #157: Is this repo still actively maintained? + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/157](https://github.com/awesome-opencode/awesome-opencode/discussions/157) +- **Author**: [@nikhilmaddirala](https://github.com/nikhilmaddirala) +- **Created At**: `2026-02-11T11:21:14Z` +- **Category**: `General` + +### Post Content + +There haven't been any updates in over two weeks but I see a lot of cool new projects announced on Reddit and Discord. Any recommendations for where else to look for all things opencode? Thanks! + +### Comments (1) + +#### [@nigel-dev](https://github.com/nigel-dev) commented on `2026-02-13T15:41:06Z`: + +yea looks like it was last updated 3 weeks ago and there are number of PRs for plugins just waiting. + +--- + +## Discussion #163: OpenSlimedit + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/163](https://github.com/awesome-opencode/awesome-opencode/discussions/163) +- **Author**: [@ars-ppi](https://github.com/ars-ppi) +- **Created At**: `2026-02-15T01:49:03Z` +- **Category**: `Plugin` + +### Post Content + +An Opencode plugin that reduces token usage by up to 33% with zero configuration. It compresses tool descriptions, compacts read output, and adds line-range edit support. Benchmarks included in the Repo + +https://github.com/ASidorenkoCode/openslimedit + +--- + +## Discussion #246: awesome-opencode is listed on Shypd — AI Tool Directory + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/246](https://github.com/awesome-opencode/awesome-opencode/discussions/246) +- **Author**: [@mepragya-code](https://github.com/mepragya-code) +- **Created At**: `2026-04-02T17:40:50Z` +- **Category**: `General` + +### Post Content + +Hey there, **awesome-opencode** is listed on **Shypd** — the largest open index of AI tools. 84,619+ AI tools onboarded already. + +View your tool details here: https://shypd.ai/tools/awesome-opencode + +--- + +## Discussion #267: loadoutz (mcp portal with mutli tool call and code mode) + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/267](https://github.com/awesome-opencode/awesome-opencode/discussions/267) +- **Author**: [@waffflebby](https://github.com/waffflebby) +- **Created At**: `2026-04-08T16:13:58Z` +- **Category**: `Plugin` + +### Post Content + +yoo, opencode users + +if u hate config use mcps, want to try code mode and mutli tool call already set up + +take a look at loadoutz.io + + +--- + +## Discussion #356: Two new OpenCode plugins for token optimization: opencode-mcp-triage & opencode-triage + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/356](https://github.com/awesome-opencode/awesome-opencode/discussions/356) +- **Author**: [@cascharly](https://github.com/cascharly) +- **Created At**: `2026-05-15T01:34:09Z` +- **Category**: `Plugin` + +### Post Content + +Hi, I built two plugins for OpenCode that might be useful here: + +**opencode-mcp-triage** — opencode-mcp-triage strips MCP tool definitions from the main prompt and routes them to dedicated subagents. Instead of loading every server's tools into every message, it uses keyword matching to activate only what you need. Cuts prompt token costs by eliminating MCP tool bloat — no LLM overhead, no extra API calls, zero setup. +https://github.com/cascharly/opencode-mcp-triage + +**opencode-triage** +OpenCode already lazy-loads skill bodies — but it still injects every skill's name and description (from SKILL.md frontmatter) into the prompt on every message. With a growing skill library and verbose descriptions, that can mean hundreds of tokens burned before you type a word. opencode-triage eliminates that XML list entirely, replacing it with a single 59-token tool definition and routing on-demand via keyword matching. +https://github.com/cascharly/opencode-triage + +Both are on npm, zero-config install (npm install -g and restart). I'd love for you to try them out and see if they work well in your setup — feedback and suggestions are very welcome. Hope you find them useful. + +### Comments (1) + +#### [@TomLucidor](https://github.com/TomLucidor) commented on `2026-09-08T13:08:03Z`: + +Would love to see an update on these + +--- + +## Discussion #426: OpenCode Rotator Plugin - sidebar for local ChatGPT account rotation + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/426](https://github.com/awesome-opencode/awesome-opencode/discussions/426) +- **Author**: [@xnnnc](https://github.com/xnnnc) +- **Created At**: `2026-06-12T22:55:56Z` +- **Category**: `Plugin` + +### Post Content + +I built **OpenCode Rotator Plugin**, a small OpenCode TUI sidebar for a local ChatGPT account rotator server. + +Repo: https://github.com/xnnnc/opencode-rotator-plugin +Companion local server / GUI: https://github.com/xnnnc/opencode-chatgpt-account-rotator +Related awesome-opencode PR: https://github.com/awesome-opencode/awesome-opencode/pull/425 + +What it shows in the sidebar: + +- active account label/status +- plan and Codex usage windows +- watch status +- saved account count +- quick actions for usage refresh, watch start/stop, and switching to the next healthy account + +Security model: the plugin does not read or write auth files directly. It only talks to the local rotator server on `127.0.0.1` by default. The companion server handles local OpenCode/ChatGPT auth state and is intended for one trusted user on one trusted machine, not as a hosted credential service. + +Feedback welcome, especially from people running OpenCode with ChatGPT login and more than one local account. + +--- + +## Discussion #437: @ask agent with context isolation for non-project questions. + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/437](https://github.com/awesome-opencode/awesome-opencode/discussions/437) +- **Author**: [@am35a](https://github.com/am35a) +- **Created At**: `2026-06-15T03:28:20Z` +- **Category**: `Agents` + +### Post Content + +## opencode-ask-agent + +The agent and plugin for opencode that allows you to ask questions outside of the project. The session context is completely isolated—code, files, and project history do not affect the responses. + +https://github.com/am35a/opencode-ask-agent + +--- + +## Discussion #460: opencode-helper — zero-dependency Python CLI for session cleanup, usage analytics & workflow visualization + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/460](https://github.com/awesome-opencode/awesome-opencode/discussions/460) +- **Author**: [@v587d](https://github.com/v587d) +- **Created At**: `2026-06-21T09:10:19Z` +- **Category**: `Projects` + +### Post Content + +Hi everyone 👋 + +I'd like to introduce **[opencode-helper](https://github.com/v587d/opencode-helper)** — a zero-dependency Python CLI tool built to complement the OpenCode workflow. + +## What it does + +- **Session cleanup** — delete old sessions and temp files with safety checks +- **Usage analytics** — analyze model, tool, MCP, and skill usage patterns with AI interpretation +- **Workflow visualization** — generate agent call topology diagrams (HTML + terminal) + +## Why + +As OpenCode adoption grows, session directories and temp files pile up quickly. opencode-helper gives users a safe, single-command way to clean up, understand how they've been using the agent, and visualize the topology of agent calls — all without pulling in any third-party dependencies. + +## PR + +I've also opened **[PR #454](https://github.com/awesome-opencode/awesome-opencode/pull/454)** to add it to the projects list. Happy to make any changes if the format doesn't match the contributing guidelines. Thanks for maintaining this awesome list! + +--- + +## Discussion #544: opencode-profiles — 17 agent personalities for OpenCode + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/544](https://github.com/awesome-opencode/awesome-opencode/discussions/544) +- **Author**: [@gtmdev-br](https://github.com/gtmdev-br) +- **Created At**: `2026-07-24T13:57:40Z` +- **Category**: `Agents` + +### Post Content + +## opencode-profiles 🎭 + +Switch between **17 specialized agent personalities** for OpenCode with a single command. Each profile has dedicated agents, MCP servers, and permissions. + +```bash +op build # → Software Engineer +op design # → Visual Designer +op full # → Full Stack (All Skills + All MCPs) +op sales # → Sales Executive +``` + +🔗 https://github.com/gtmdev-br/opencode-profiles + +Also check out **agent-ci** — a CLI to validate, test, and benchmark your profiles: +🔗 https://github.com/gtmdev-br/agent-ci + +--- + +## Discussion #585: staffetta — the agent ends and hands the baton to a fresh session, instead of compacting (5.5k tokens per round, not 142k) + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/585](https://github.com/awesome-opencode/awesome-opencode/discussions/585) +- **Author**: [@RaffaeleSpezia](https://github.com/RaffaeleSpezia) +- **Created At**: `2026-08-09T18:05:42Z` +- **Category**: `Projects` + +### Post Content + +Sharing a project for people who leave opencode running on long jobs. + +**The problem.** Auto-compaction fires when there is no room left, which is almost +never the moment a piece of work is actually finished. It rewrites the beginning of +the conversation, which invalidates the prefix cache — so from then on every +question pays to re-read everything. In one real session an agent hit the ceiling +four times in two hours and ended up resuming from ~142,000 tokens on every request. + +**What staffetta does instead.** The agent decides. At a milestone it writes what +the next session needs to a file, and **ends** — the session really does end, and a +fresh one picks up the baton reading ~5,500 tokens. Round seven starts from the same +size as round one, because the memory file is overwritten instead of accumulated. + +Memory is three files on disk: `MEMORY.md` (where I am, what comes next, +overwritten), `JOURNAL.md` (what was done, with measurements, and what must not be +tried again — append-only), `AGENTS.md` (the rules). Because it is on disk, you can +read it, diff it, correct it by hand, and steer the next round by editing it — and +unlike a chat message it persists. + +**The opencode part.** `adapters/opencode/loop.sh` runs opencode headless and pipes +the output through `tee`, so the run reaches your screen *and* a log file. In that +state there is no interface at all: you watch everything live without being part of +the loop, and nothing waits for you to press a key. When the agent calls `ask`, the +loop stops and opens the real TUI with the question already written into the memory +file — you talk, it writes the decision down, runs `resume`, and the stream picks +up. The client stops being the system and becomes a tool the agent operates. + +The loop itself decides nothing: it ends when the model runs `--done` or +`--blocked`, never on an inferred threshold. The round cap and the per-round timeout +are spending limits, not judgements about the work. + +**Measured** on a rented RTX PRO 6000 with KAT-Coder V2.5 served locally by +llama.cpp: 7 milestones closed autonomously, 7 of 7 checkpoints invoked unprompted, +587 tests green at the end from a clean shell. + +https://github.com/RaffaeleSpezia/staffetta — Apache-2.0, pure bash, no +dependencies. Everything under `core/` works with any agent that can run a shell +command; the opencode adapter is one file, meant to be copied and changed. + +Two things I would like to hear from people here. Has anyone tried steering a run +purely by editing a file between rounds instead of typing in the TUI — does it hold +up on longer jobs? And has anyone found a way to make an agent reliably notice that +a milestone is *actually* closed, beyond "the tests are green"? + + +--- + +## Discussion #718: Plugin proposal: opencode-idea-inbox — a persistent idea backlog with native TUI dispatch + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/718](https://github.com/awesome-opencode/awesome-opencode/discussions/718) +- **Author**: [@apilot](https://github.com/apilot) +- **Created At**: `2026-09-14T15:41:44Z` +- **Category**: `Plugin` + +### Post Content + +## The problem + +During a long session you constantly get stray thoughts — "it would be nice to also add caching here", "the tests for that module need a rerun" — but acting on them immediately breaks your focus, and writing them into a file means they are never seen again. Native todos are agent-managed and per-session; there is no user-owned backlog that lives in the TUI, survives restarts, and can be dispatched when you are ready. + +## What it does + +`opencode-idea-inbox` adds a capture → park → dispatch loop to the TUI: + +- **Capture** — `/idea ` or the `✚ New idea…` palette entry; one turn, you stay in your current task +- **Park** — ideas live in a per-worktree SQLite backlog, shown in the `Idea Inbox` sidebar slot with live statuses (`○ pending`, `◐ in_progress`, `● done`, `✓ documented`) +- **Dispatch** — `Ctrl+X → I` opens the command palette with pending ideas first in Suggested; picking one injects a delegation mission ("delegate this task, use the right skills, mark it in_progress now and done when finished") into the main window and execution starts immediately. `/ideas start ` runs an idea in a background session instead + +Statuses are set by the agent itself via the `idea_update` tool (with a `session.idle` safety net), so the sidebar always reflects reality. + +## Why palette instead of a dialog + +opencode 1.18.30 has an upstream issue where dialogs opened from TUI plugins do not receive keyboard input. The plugin is therefore built entirely on supported primitives: keymap command layers (ideas registered first in Suggested), prompt injection via `tui.appendPrompt`/`submitPrompt`, and the `sidebar_content` slot. No dialogs, no hacks — and the UX still feels native: one hotkey, one Enter. + +## Compatibility + +- opencode 1.18.30 (verified end-to-end); no runtime dependencies +- MIT license; English and Russian READMEs + +Repository: +Listing PR: + +Happy to hear feedback on the UX and the status semantics — in particular whether `documented` (auto-hide from the panel, keep in DB history) matches how others would expect a backlog to behave. + + +--- + +## Discussion #859: Plugin proposal: open-toolbox — 19 plugins for opencode Desktop v2 in one install + +- **Original URL**: [https://github.com/awesome-opencode/awesome-opencode/discussions/859](https://github.com/awesome-opencode/awesome-opencode/discussions/859) +- **Author**: [@Bandonker](https://github.com/Bandonker) +- **Created At**: `2026-10-13T16:55:04Z` +- **Category**: `Plugin` + +### Post Content + +Opened a PR to add open-toolbox: a pack of 19 plugins for opencode Desktop v2 that install together with one npm command, or individually if you only want one or two. Sessions and handoffs, memory and journals, plan mode, deep research, code review, context pruning, secret redaction, and a tokens/cost dashboard. Runs locally on SQLite throughout. + +Repo: https://github.com/Bandonker/open-toolbox +PR: https://github.com/awesome-opencode/awesome-opencode/pull/858 + +--- + diff --git a/docs/policy.md b/docs/policy.md new file mode 100644 index 0000000..9c14d87 --- /dev/null +++ b/docs/policy.md @@ -0,0 +1,67 @@ +# Catalog Policy + +How entries get into the catalog, how they are kept honest, and when they leave. Automation enforces most of this; this page is the reference it links to. + +## Admission + +An entry must: + +- work with OpenCode; +- point at a public, non-archived repository root (`path` for a monorepo folder); +- be the only entry for that repository and path; +- not be a cryptocurrency, token or trading project (zero tolerance); +- pass `npm run validate` (schema, field limits, kind/category fit). + +### OpenCode V2 requirement for new plugins + +New entries in `data/plugins/` must use the V2 plugin API: depend on an `@opencode/*` package (normally `@opencode/plugin`) and export `Plugin.define({ id, setup(ctx) })`. Pre-release V2 builds published under the old name (`@opencode-ai/plugin@0.0.0-beta-*`, `@next`, `@beta`, or `@opencode-ai/client`) also count. Packages that ship both V1 and V2 entry points count as V2. + +The `validate` check detects this from, in order: the entry's `npm` package, `package.json` files in the repository (at `path`, the root and `packages/*` / `plugins/*`), then the source code. Results: + +| Detected | New plugin PR | Meaning | +| :--- | :--- | :--- | +| `v2` | passes | `@opencode/*` dependency or `Plugin.define` found | +| `v1` | blocked, labeled `needs-v2` | Only `@opencode-ai/plugin`/`sdk` 1.x, or a legacy V1 plugin function without `Plugin.define` | +| `unknown` | passes with `needs-human` | Nothing conclusive found; a maintainer verifies by hand. Adding `npm` or `path` usually resolves it | + +PRs labeled `needs-v2` are re-checked every night. When the target migrates, the bot relabels the PR, fills in any missing fields on same-repo branches, re-runs `validate` and tells the author. **After 60 days still on V1, the PR is closed**; reopen it or resubmit through the issue form after migrating. + +Themes, agents, projects and resources are not blocked on V2. Their `compat` is informational (`v2`/`v1` when they use the SDK, otherwise `n/a`). + +## Existing V1 plugins: sunset on 2027-01-01 + +Plugins already in the catalog that are V1-only carry a `V1 only` badge in the README and on the site. **After 2027-01-01 they are removed** by the nightly health job's removal PR unless they have migrated (the check runs again before removal). Plugins with `unknown` compatibility are listed in the health report for manual verification before that date. + +## Health checks and removal + +A nightly job checks every entry and maintains the **Catalog health report** issue. + +| Finding | Action | +| :--- | :--- | +| Repository renamed or transferred | Bot PR updates the `repo` URL | +| Repository archived, deleted (404), or npm package deprecated | Listed in the report; **removal PR after 30 days** if it doesn't recover | +| V1-only plugin after 2027-01-01 | Removal PR | +| No push for 6–12 months / 12+ months | `quiet` / `stale` badge on the site. **Never removed for inactivity alone**: small, finished tools are fine | + +Removal PRs are reviewed like any other PR; closing one keeps the entries until the next run proposes them again. Git history is the archive; there is no separate retired list. + +## Discovery + +A weekly scout searches npm for packages published since V2 shipped that depend on `@opencode/*`, keeps public, licensed, non-archived, non-fork repositories that are not already listed or in an open PR, and ranks them by weekly downloads, then stars. It posts a **Scout** issue; a maintainer ticking a candidate's box makes the bot open a PR for it. Add a package or repo to [`discovery/declined.txt`](../discovery/declined.txt) to stop suggesting it. + +## Branch protection + +`main` has a ruleset: changes land only through pull requests with a passing `validate` check (GitHub rulesets do not accept direct pushes while a status check is required), and force-pushes and deletion are blocked. Bots open PRs too; GitHub holds workflow runs on bot-opened PRs for approval, so each bot approves the `validate` run on its own PR. Repository admins can merge a PR whose check is failing or pending (for a broken CI). + +## Automation map + +| Workflow | When | What | +| :--- | :--- | :--- | +| `validate-pr.yml` | every PR | Required `validate` check | +| `triage.yml` | PR opened/updated | Labels and a results comment (base-branch code only). `needs-human` is only ever removed by a maintainer | +| `generate-readme.yml` | push to main | README.md and dist/registry.json; fails without writing on any invalid entry. The regenerated commit goes through a bot PR (`bot/readme-*`) that merges itself once `validate` passes | +| `site.yml` | push to main, daily | Search site on GitHub Pages | +| `health.yml` | daily | Health report issue, rename and removal PRs | +| `reprobe.yml` | daily | Re-checks `needs-v2` PRs | +| `scout.yml` | weekly | Scout issue with V2 plugin candidates | +| `issues.yml` | issue opened/edited | Issue-form submissions and scout acceptances become PRs | diff --git a/docs/schema-design.md b/docs/schema-design.md index 4ff3e81..6a06320 100644 --- a/docs/schema-design.md +++ b/docs/schema-design.md @@ -31,8 +31,6 @@ awesome-opencode/ │ │ └── *.yaml │ ├── resources/ │ │ └── *.yaml # Guides, configs, MCP servers, tools, commands -│ ├── forks/ -│ │ └── *.yaml │ └── examples/ │ └── *.yaml # Exemplar files showing all fields └── docs/ @@ -114,7 +112,7 @@ Guides, configurations, MCP servers, tools, and commands that enhance the OpenCo ### 2.6 Fork (`fork`) -Modified builds of OpenCode itself with custom features or patches. Forks maintain compatibility while adding functionality. +Modified builds of OpenCode itself with custom features or patches. Forks maintain compatibility while adding functionality. They live in `data/projects/` with `kind: fork`. **Example Use Cases:** - Custom builds with enterprise features @@ -194,39 +192,44 @@ If `scope` is set to `[global, project]` and both global and project configs def ## 4. YAML Schema -The awesome-opencode registry uses a flexible schema with four required fields and several optional fields for enhanced discoverability. +`data/schema.json` defines the fields; `scripts/utils/catalog.js` adds rules that need the whole catalog (one entry per repository and `path`, `kind` must fit the category directory, `compat` required for plugins, no placeholder repo owners, no mis-encoded text). Unknown fields are rejected (`additionalProperties: false`). ### Required Fields | Field | Type | Description | |-------|------|-------------| -| `name` | string | Display name for the extension (human-readable) | -| `repo` | string | Repository URL (HTTPS format, e.g., `https://github.com/user/repo`) | -| `tagline` | string | Short punchy summary, max 120 characters | -| `description` | string | Full description (can be multi-line) | +| `name` | string | Display name, max 80 characters | +| `repo` | string | Repository root URL on GitHub, GitLab, Codeberg or Gitee (gists and GitHub discussions also accepted). No `/tree/` or `/blob/` paths, npm pages or websites | +| `tagline` | string | Short summary, max 120 characters | +| `description` | string | Full description, max 1500 characters | +| `kind` | enum | `plugin`, `theme`, `agent`, `skill`, `mcp-server`, `client`, `tool`, `config`, `guide`, `fork` | +| `topics` | array | 1–3 of the fixed topic list (see `data/schema.json`); the first is the primary topic used for README grouping | +| `compat` | enum | Required for `data/plugins/` only: `v2`, `v1` or `unknown` (verified by CI). Other categories: optional, `v2`/`v1` when they use the SDK, otherwise `n/a` | ### Optional Fields | Field | Type | Default | Description | |-------|------|---------|-------------| +| `path` | string | - | Folder inside a monorepo, e.g. `packages/my-plugin` | +| `npm` | string | - | npm package name; used for the V2 check, health checks and the npm link | +| `also` | array | - | Secondary kinds (e.g. `[mcp-server]`), cross-listed on the site | | `scope` | array | `[global]` | Installation scope: `[global]`, `[project]`, or `[global, project]` | -| `tags` | array | `[]` | Strings for filtering and discoverability | -| `min_version` | string | - | Minimum OpenCode version required (semver, e.g., `"1.0.0"`) | +| `tags` | array | `[]` | Free-form search keywords (not rendered; use `topics` for categorization) | +| `min_version` | string | - | Minimum OpenCode version required (semver, e.g., `"2.0.0"`) | | `homepage` | string | - | Documentation URL if different from repository | | `installation` | string | - | Detailed installation instructions (markdown format) | -### Type Derivation +### Kind per Category -Extension type is **not stored in YAML** - it's derived from the directory location: +The directory is the coarse bucket (and the `type` downstream consumers see); `kind` says what the entry actually is. -| Directory | Type | -|-----------|------| +| Directory | Allowed `kind` | +|-----------|----------------| | `data/plugins/` | `plugin` | | `data/themes/` | `theme` | -| `data/agents/` | `agent` | -| `data/projects/` | `project` | -| `data/resources/` | `resource` | -| `data/forks/` | `fork` | +| `data/agents/` | `agent`, `skill` | +| `data/projects/` | `client`, `tool`, `mcp-server`, `skill`, `agent`, `fork` | +| `data/resources/` | `guide`, `config`, `mcp-server`, `skill`, `tool` | ### Minimal Valid Entry @@ -235,32 +238,43 @@ name: My Extension repo: https://github.com/user/my-extension tagline: A brief description of what this does description: A longer explanation of the extension. +kind: plugin +topics: + - workflow +compat: v2 ``` ### Complete Entry (All Fields) ```yaml name: My Extension -repo: https://github.com/user/my-extension -tagline: A brief tagline (max 120 chars) +repo: https://github.com/user/my-monorepo +path: packages/my-extension +npm: opencode-my-extension +homepage: https://example.com/docs +tagline: "A brief tagline: quote it when it contains a colon" description: | A longer description explaining the extension in detail. +kind: plugin +also: + - mcp-server +topics: + - memory + - context +compat: v2 scope: - global - project tags: - productivity - - ai -min_version: "1.0.0" -homepage: https://example.com/docs +min_version: "2.0.0" installation: | - ## Installation - ```bash - git clone https://github.com/user/my-extension ~/.config/opencode/plugin/my-extension - ``` + Add `opencode-my-extension` to the `plugin` list in `opencode.json`. ``` +Use `npm run new` to scaffold an entry and `npm run fmt` to rewrite entries in canonical key order with safe quoting. + ### Examples Directory Full exemplar files for each extension type are available in `data/examples/`: @@ -272,7 +286,7 @@ Full exemplar files for each extension type are available in `data/examples/`: | Agent | `data/examples/agent.yaml` | | Project | `data/examples/project.yaml` | | Resource | `data/examples/resource.yaml` | -| Fork | `data/examples/fork.yaml` | +| Fork | `data/examples/fork.yaml` (forks now live in `data/projects/` with `kind: fork`) | --- @@ -347,6 +361,12 @@ The awesome-opencode schema is designed for seamless conversion to downstream pl | `homepage` | `homepageUrl` | Documentation URL | | `installation` | `installation` | Markdown content | | `min_version` | `minVersion` | Semver string | +| `path` | `repoPath` | Monorepo folder (added 2026-10) | +| `npm` | `npmPackage` | npm package name (added 2026-10) | +| `kind` | `kind` | What the entry is (added 2026-10) | +| `also` | `also` | Secondary kinds (added 2026-10) | +| `topics` | `topics` | Use-case topics (added 2026-10) | +| `compat` | `compat` | `v2`, `v1`, `unknown` or `n/a`; plugins default to `unknown` (added 2026-10) | ### Conversion Example @@ -422,9 +442,11 @@ When an agent assists with installation, it can: Future improvements to the contribution process: -1. **Schema Validation**: CI checks YAML validity and required fields -2. **Preview Tool**: Generate opencode.cafe JSON preview for PRs -3. **Link Checking**: Verify `repo` and `homepage` URLs are accessible +Implemented in 2026-10; see [policy.md](policy.md#automation-map): + +1. **Schema Validation**: the required `validate` check runs on every PR +2. **V2 Compatibility Check**: plugins are probed for `@opencode/*` and `Plugin.define` +3. **Link Checking**: the nightly health job tracks renamed, archived, missing and deprecated targets --- @@ -439,7 +461,8 @@ Future improvements to the contribution process: | `agent` | `data/agents/` | | `project` | `data/projects/` | | `resource` | `data/resources/` | -| `fork` | `data/forks/` | + +Forks are entries in `data/projects/` with `kind: fork`; see "Kind per Category" in section 4. ### Minimal Valid Entry @@ -479,69 +502,19 @@ installation: | ### Commands ```bash -# Validate schema and entries -node scripts/validate.js - -# Regenerate README -node scripts/generate-readme.js +npm run validate # schema and catalog rules for every entry +npm run generate # regenerate README.md +npm run new -- --category plugins --repo --tagline "..." --topics memory +npm run fmt # canonical formatting for all entries ``` --- -## 9. Future Work +## 9. Status -Remaining tasks for the awesome-opencode registry. - -### 9.1 Update Contributing Guide - -Update `contributing.md` to: -- Reference `data/examples/` directory for full field documentation -- Document optional fields (`scope`, `tags`, `min_version`, `homepage`, `installation`) -- Explain scope behavior and defaults - -### 9.2 README Generation Enhancements (Optional) - -Update `scripts/generate-readme.js` to optionally display: -- Tags for entries that have them -- Scope indicators -- Type badges derived from directory - -### 9.3 Export Script for Downstream Platforms - -Create `scripts/export-json.js` to generate JSON for platforms like opencode.cafe: - -```javascript -// Pseudocode -for each file in data/{category}/*.yaml: - entry = parseYAML(file) - entry.type = category // derived from directory - entry.productId = filename // derived from filename - output.push(mapFields(entry)) -writeJSON(output) -``` - -**Field mapping:** -| YAML | JSON Output | -|------|-------------| -| `name` | `displayName` | -| `repo` | `repoUrl` | -| `tagline` | `tagline` | -| `description` | `description` | -| (directory) | `type` | -| (filename) | `productId` | -| `scope` | `scope` (default `["global"]`) | -| `tags` | `tags` (default `[]`) | -| `homepage` | `homepageUrl` | -| `installation` | `installation` | -| `min_version` | `minVersion` | - -**Usage:** -```bash -node scripts/export-json.js > dist/registry.json -node scripts/export-json.js --pretty > dist/registry.json -``` +The contributing guide, README enhancements (topic/kind grouping, V1/V2 badges, counts, recently added) and the JSON export described in earlier versions of this document are implemented. Catalog rules are in [policy.md](policy.md). --- -*Document Version: 1.2* -*Last Updated: 2026-01-12* +*Document Version: 2.0* +*Last Updated: 2026-10-17* diff --git a/package-lock.json b/package-lock.json index 4d84b20..36459c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,54 +9,15 @@ "version": "1.0.0", "license": "CC0-1.0", "dependencies": { - "ajv": "^8.17.1", + "ajv": "^8.20.0", "ajv-formats": "^3.0.1", - "glob": "^11.0.0", - "js-yaml": "^4.1.0" - } - }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" + "js-yaml": "^4.3.2" } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -86,80 +47,12 @@ } } }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -167,9 +60,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", + "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", "funding": [ { "type": "github", @@ -182,79 +75,20 @@ ], "license": "BSD-3-Clause" }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", - "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -269,70 +103,6 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, - "node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -341,241 +111,6 @@ "engines": { "node": ">=0.10.0" } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } } } } diff --git a/package.json b/package.json index 1af4133..7c91ffa 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,35 @@ { "name": "awesome-opencode", "version": "1.0.0", - "description": "A curated list of plugins, themes, agents, and resources for Opencode", + "description": "A curated, validated catalog of OpenCode plugins, themes, agents, MCP servers, clients and resources", "private": true, "scripts": { - "generate": "node scripts/generate-readme.js", "validate": "node scripts/validate.js", - "bootstrap": "node scripts/bootstrap.js" + "generate": "node scripts/generate-readme.js", + "export": "node scripts/export-json.js --pretty --output dist/registry.json", + "new": "node scripts/new-entry.js", + "fmt": "node scripts/fmt.js", + "check-pr": "node scripts/check-pr.js --base origin/main", + "health": "node scripts/health-check.js --dry-run", + "scout": "node scripts/scout.js run --dry-run", + "site": "node scripts/build-site.js", + "test": "node --test \"test/*.test.js\"" }, - "keywords": ["opencode", "awesome-list", "plugins", "themes", "agents"], + "keywords": [ + "opencode", + "awesome-list", + "plugins", + "themes", + "agents", + "mcp" + ], "license": "CC0-1.0", "dependencies": { - "ajv": "^8.17.1", + "ajv": "^8.20.0", "ajv-formats": "^3.0.1", - "glob": "^11.0.0", - "js-yaml": "^4.1.0" + "js-yaml": "^4.3.2" + }, + "engines": { + "node": ">=20" } } diff --git a/prompts/opencode-review-loop.md b/prompts/opencode-review-loop.md new file mode 100644 index 0000000..66836f2 --- /dev/null +++ b/prompts/opencode-review-loop.md @@ -0,0 +1,134 @@ +# OpenCode Backlog Review Loop Prompt: V2 Compatibility & Quality Assessment + +You are an expert OpenCode maintainer and automated backlog review agent for **`Heretek-AI/awesome-opencode`**. +Your mission is to iteratively review open Pull Requests and Issues in the repository, assess whether each submission is **worth adding** to the catalog, and determine whether it is **compatible with OpenCode v2**. + +--- + +## Evaluation Criteria + +### 1. OpenCode V2 Compatibility Analysis +OpenCode V2 introduced a centralized background daemon architecture and completely overhauled the extension model. **V1 plugin code does NOT execute in OpenCode V2 without migration.** + +Evaluate the target tool's codebase or documentation against these V2 standards: + +* **For Plugins (`data/plugins/`):** + * **V2 Modern (Pass / Compatible):** + * Imports from `@opencode/plugin` (NOT legacy `@opencode-ai/plugin`). + * Uses the domain-driven hook architecture with `Plugin.define({ id: "...", async setup(ctx) { ... } })`. + * Utilizes modern `ctx` domain objects (e.g. `ctx.location.directory`, `ctx.storage`). + * Or implements valid dual-support (exporting both V1 server callback and V2 `setup` via `Plugin.define`). + * **V1 Legacy (Needs Migration):** + * Uses `@opencode-ai/plugin` with the legacy callback export: `export const MyPlugin: Plugin = async ({ directory, project, client }) => { ... }`. + * Missing `Plugin.define` or stable string `id`. + * Relies on deprecated V1 CLI-in-process state. + +* **For MCP Servers & Resources (`data/resources/`):** + * Conforms to the standard Model Context Protocol (MCP) specification. + * Properly usable via OpenCode V2's native MCP integration (`opencode.json` mcp servers). + +* **For Projects (`data/projects/`):** + * Companion apps, TUIs, GUIs, or desktop tools must integrate with OpenCode V2's daemon/API or support modern OpenCode workspaces. + +* **For Agents & Skills (`data/agents/`):** + * Subagents, personalities, or prompts structured for OpenCode V2's agent system (`.opencode/` agent/skills configuration). + +* **For Themes (`data/themes/`):** + * Valid theme YAML/JSON compatible with OpenCode's terminal color palette. + +--- + +### 2. "Worth Adding" Quality Bar +Even if code is technically compatible, it must meet the quality standards of `awesome-opencode`: + +1. **Relevance**: Directly enhances or integrates with the OpenCode ecosystem. +2. **Maintenance & Health**: + * Repository is public, accessible, and not archived. + * Not archived, deleted or deprecated (inactivity alone is fine; see docs/policy.md). + * Not abandoned or broken. +3. **Safety & Policy**: + * **STRICT PROHIBITION**: Zero tolerance for cryptocurrency, tokens, Web3 trading bots, or token pumps (per repository governance policy). + * No malicious scripts, credential scrapers, or obfuscated payloads. +4. **Value & Uniqueness**: + * Provides genuine utility or unique capability. + * Not an exact duplicate or low-effort fork of an already listed entry. +5. **Catalog Metadata Conformity**: + * Target path: `data//.yaml` (where category is `plugins`, `themes`, `agents`, `projects`, or `resources`). + * Valid YAML conforming to `data/schema.json`: + * `name`: string (1-60 chars) + * `repo`: valid HTTPS repository URL + * `tagline`: punchy summary (max 120 chars) + * `description`: informative overview of functionality + +--- + +## Verdict Classifications + +Assign one of the following verdicts to every reviewed item: + +| Verdict | When to Use | Action Required | +| :--- | :--- | :--- | +| **`APPROVE_AND_MERGE`** | High quality, active, fully compatible with OpenCode V2, valid YAML. | Recommend merging PR. | +| **`NEEDS_V2_UPDATE`** | Good concept and maintained, but currently implemented with legacy V1 plugin API (`@opencode-ai/plugin`). | Request update from author to migrate to `@opencode/plugin` / `Plugin.define`. | +| **`NEEDS_METADATA_FIX`** | Good project, but YAML has schema errors (e.g. tagline > 120 chars, invalid category, missing fields). | Request author adjust YAML. | +| **`REJECT_ABANDONED`** | Repository deleted (404), archived, or npm package deprecated. | Recommend closing. | +| **`REJECT_POLICY`** | Crypto, spam, duplicate, or unrelated to OpenCode. | Recommend closing with reason. | +| **`ISSUE_CONVERT_TO_PR`** | (For Issues) Listing suggestion is high quality and V2 compatible. | Recommend creating catalog entry YAML. | +| **`ISSUE_CLOSE`** | (For Issues) Bug report meant for upstream core, invalid, or already resolved. | Recommend closing with guidance. | + +--- + +## Review Output Format + +For each item reviewed in the loop, you must provide your assessment in this exact JSON block: + +```json +{ + "item_type": "PR", + "item_number": 486, + "title": "docs: add Quota Board plugin for OpenCode V2", + "target_name": "Quota Board", + "target_repo": "https://github.com/gilvex/opencode-quota-board", + "category": "plugins", + "worth_adding": true, + "worth_adding_rationale": "Active, well-documented plugin providing provider quota monitoring in the OpenCode terminal.", + "opencode_v2_status": "V2_COMPATIBLE", + "opencode_v2_details": "Explicitly targets OpenCode 2.0.28+, uses modern TUI hooks and active provider connections.", + "yaml_valid": true, + "verdict": "APPROVE_AND_MERGE", + "confidence_score": 95, + "summary_reason": "High quality V2-native plugin with active maintenance and clean YAML entry.", + "recommended_comment": "Thank you for this submission! This entry is verified compatible with OpenCode V2 and meets all awesome-opencode catalog standards. Approved for merge." +} +``` + +--- + +## Loop Execution Step-by-Step + +When executing the loop: +1. **Receive Payload**: Inspect the provided PR diff or Issue metadata, repository URL, and target package details. +2. **Inspect Upstream Project**: + * Check target repo README and `package.json` (if available) for `@opencode/plugin` vs `@opencode-ai/plugin`. + * Check commit dates and repository state. +3. **Validate Schema**: Check the YAML formatting against `data/schema.json`. +4. **Render JSON Verdict**: Output the structured assessment JSON. +5. **Report & Proceed**: Provide a clear, human-readable executive summary followed by the next queued item. + +--- + +## Deterministic Pre-Checks (run these first; do not re-derive them) + +The repository now automates everything mechanical. Your job is the judgment calls only. + +1. **Do not hand-check schema, URLs, duplicates or V2 markers.** The required `validate` check (`scripts/check-pr.js`) and the triage bot already do, and the PR carries labels: `ready`, `needs-v2`, `needs-metadata`, `needs-human`. Read them with `gh pr view --json labels,statusCheckRollup`. +2. **V2 detection authority is `scripts/utils/compat.js`.** Run `node -e "require('./scripts/utils/compat').probeCompat([{key:'x',repo:'',npm:'',plugin:true}]).then(r=>console.log(r.get('x')))"` instead of reading package.json by hand. Pre-release V2 pins (`@opencode-ai/plugin@0.0.0-beta-*`, `@next`, `@opencode-ai/client`) are V2; `@opencode-ai/plugin@1.x` is V1. +3. **Only review PRs whose `validate` check is green** (or labeled `needs-human`, where you resolve the open question). A PR with no `validate` run can get one with `gh workflow run validate-pr.yml --ref `. +4. **Your verdict covers:** relevance to OpenCode, real utility (not a duplicate in spirit), safety/policy (zero tolerance for crypto/token/trading), and copy quality of `tagline`/`description`/`topics`. +5. **Inactivity is not a rejection reason.** Archived, deleted or npm-deprecated targets are; see `docs/policy.md`. The old "commits within 6 months" bar no longer applies. + +## Merging Rules + +- Merge with `gh pr merge --squash` so the required check applies. **Never push catalog changes directly to `main`** and never "apply" a PR by committing its files separately; if a PR needs edits, push them to the PR branch. +- Before merging anything you edited, run `npm run validate && npm run generate` locally and confirm both exit 0. +- New entries must include `kind`, `topics` and (for plugins) `compat`; `npm run fmt` fixes formatting. diff --git a/prompts/opencode-standalone-loop.md b/prompts/opencode-standalone-loop.md new file mode 100644 index 0000000..2f71763 --- /dev/null +++ b/prompts/opencode-standalone-loop.md @@ -0,0 +1,92 @@ +# OpenCode Autonomous Backlog Reviewer Loop + +You are the autonomous maintainer and backlog review agent for **`Heretek-AI/awesome-opencode`**. +Your objective is to loop through all open Pull Requests and Issues on the repository, assess whether each submission is **worth adding** to the catalog, and verify whether it is **compatible with OpenCode V2**. + +--- + +## 🎯 Evaluation Rubric + +### 1. OpenCode V2 Compatibility (Critical) +OpenCode V2 completely replaced the legacy V1 plugin system with a domain-driven hook architecture. **V1 plugin code will NOT execute in OpenCode V2.** + +* **Plugins (`data/plugins/*.yaml`)**: + * **V2 Native (`V2_COMPATIBLE`)**: + * Imports from `@opencode/plugin` (NOT legacy `@opencode-ai/plugin`). + * Uses `Plugin.define({ id: "...", async setup(ctx) { ... } })` with a stable string `id`. + * Uses modern `ctx` domain properties (e.g. `ctx.location.directory`, `ctx.storage`). + * **V1 Legacy (`V1_LEGACY_NEEDS_MIGRATION`)**: + * Imports from `@opencode-ai/plugin` or `@opencode-ai/sdk`. + * Exports legacy callback functions like `async function(ctx: PluginInput)` or `({ directory, project, client }) => { ... }`. + * Lacks `Plugin.define`. +* **Projects / Companion Apps (`data/projects/*.yaml`)**: + * Must be compatible with OpenCode V2's daemon architecture (port 4096 / REST & WebSocket APIs). +* **MCP Servers / Resources (`data/resources/*.yaml`)**: + * Conforms to the Model Context Protocol (MCP) spec and is configurable in OpenCode V2. +* **Agents & Skills (`data/agents/*.yaml`)**: + * Conforms to modern OpenCode agent / skill conventions. +* **Themes (`data/themes/*.yaml`)**: + * Valid theme YAML conforming to OpenCode color tokens. + +### 2. "Worth Adding" Quality Bar +1. **Relevance**: Directly enhances or integrates with the OpenCode ecosystem. +2. **Active Maintenance**: + * Repository is public, accessible, and not archived. + * Not archived, deleted or deprecated (inactivity alone is fine; see docs/policy.md). +3. **Safety & Policy**: + * **STRICT PROHIBITION**: Zero tolerance for cryptocurrency, tokens, or Web3 trading pumps. + * No malicious scripts or credential stealers. +4. **Schema Compliance**: + * YAML file placed in `data//.yaml`. + * `tagline` <= 120 characters. + * Valid YAML format conforming to `data/schema.json`. + +--- + +## 📋 Verdict Types + +- **`APPROVE_AND_MERGE`**: High quality, active, fully OpenCode V2 compatible, schema valid. +- **`NEEDS_V2_UPDATE`**: High quality concept, but built on legacy V1 plugin APIs (`@opencode-ai/plugin`). Needs migration to `@opencode/plugin` / `Plugin.define`. +- **`NEEDS_METADATA_FIX`**: Good project, but YAML has schema errors (e.g. tagline too long, wrong folder). +- **`REJECT_ABANDONED`**: Target repo deleted (404), archived, or npm package deprecated. +- **`REJECT_POLICY`**: Crypto, token pump, duplicate, or unrelated to OpenCode. +- **`ISSUE_CONVERT_TO_PR`**: (For Issues) Submission request is high quality and V2 compatible; needs a catalog YAML created. +- **`ISSUE_CLOSE`**: (For Issues) Off-topic, upstream core bug report, answered, or invalid. + +--- + +## 🔄 Autonomous Loop Instructions + +1. **Check Progress**: + Read `reviews/summary.md` and `reviews/review_results.json` to find which PRs and issues have already been reviewed. +2. **Fetch Next Unreviewed Items**: + Use `gh pr list -R Heretek-AI/awesome-opencode --state open --limit 500 --json number,title,headRefName` and `gh issue list -R Heretek-AI/awesome-opencode --state open --limit 100 --json number,title`. +3. **For Each Item**: + - Inspect the changed YAML via `git show origin/:` or `gh pr diff `. + - Identify the target repository URL. + - Inspect the target repo's `package.json` and source code (using `webfetch` or `curl`) to verify `@opencode/plugin` vs `@opencode-ai/plugin`, last commit date, and documentation. + - Determine `worth_adding` and `opencode_v2_status`. + - Assign the appropriate **Verdict**. + - Append a markdown row to `reviews/summary.md`: + `| Type | [Num](url) | Title | Target Name | V2 Status | **Verdict** | Confidence% | Reason |` + - Record the structured assessment in `reviews/review_results.json`. +4. **Continue the Loop**: + Process through the queue in batches, maintaining clean logs in `reviews/summary.md`. + +--- + +## Deterministic Pre-Checks (run these first; do not re-derive them) + +The repository now automates everything mechanical. Your job is the judgment calls only. + +1. **Do not hand-check schema, URLs, duplicates or V2 markers.** The required `validate` check (`scripts/check-pr.js`) and the triage bot already do, and the PR carries labels: `ready`, `needs-v2`, `needs-metadata`, `needs-human`. Read them with `gh pr view --json labels,statusCheckRollup`. +2. **V2 detection authority is `scripts/utils/compat.js`.** Run `node -e "require('./scripts/utils/compat').probeCompat([{key:'x',repo:'',npm:'',plugin:true}]).then(r=>console.log(r.get('x')))"` instead of reading package.json by hand. Pre-release V2 pins (`@opencode-ai/plugin@0.0.0-beta-*`, `@next`, `@opencode-ai/client`) are V2; `@opencode-ai/plugin@1.x` is V1. +3. **Only review PRs whose `validate` check is green** (or labeled `needs-human`, where you resolve the open question). A PR with no `validate` run can get one with `gh workflow run validate-pr.yml --ref `. +4. **Your verdict covers:** relevance to OpenCode, real utility (not a duplicate in spirit), safety/policy (zero tolerance for crypto/token/trading), and copy quality of `tagline`/`description`/`topics`. +5. **Inactivity is not a rejection reason.** Archived, deleted or npm-deprecated targets are; see `docs/policy.md`. The old "commits within 6 months" bar no longer applies. + +## Merging Rules + +- Merge with `gh pr merge --squash` so the required check applies. **Never push catalog changes directly to `main`** and never "apply" a PR by committing its files separately; if a PR needs edits, push them to the PR branch. +- Before merging anything you edited, run `npm run validate && npm run generate` locally and confirm both exit 0. +- New entries must include `kind`, `topics` and (for plugins) `compat`; `npm run fmt` fixes formatting. diff --git a/reviews/review_state.json b/reviews/review_state.json new file mode 100644 index 0000000..bfc532a --- /dev/null +++ b/reviews/review_state.json @@ -0,0 +1,39 @@ +{ + "processed_prs": { + "486": { + "item_type": "PR", + "item_number": 486, + "title": "docs: add Quota Board plugin for OpenCode V2", + "target_name": "Quota Board", + "target_repo": "https://github.com/gilvex/opencode-quota-board", + "category": "plugins", + "worth_adding": true, + "worth_adding_rationale": "Active, well-maintained plugin adding provider quota bars, reset countdowns, and credit balances to the OpenCode V2 terminal via a collapsible sidebar and /quota popup. Genuine utility, no policy violations, distinct from the existing slkiser/opencode-quota entry.", + "opencode_v2_status": "V2_COMPATIBLE", + "opencode_v2_details": "package.json imports @opencode/plugin and @opencode/client (2.0.28), not legacy @opencode-ai/plugin. src/index.ts uses Plugin.define({ id: \"opencode-quota-board.server\", async setup(ctx) }) with modern ctx domain objects (ctx.integration, ctx.provider, ctx.rpc, ctx.event, ctx.options). README states \"Built for OpenCode V2\", tested with 2.0.28, uses active V2 connections, avoids V1 auth.json/cookie scraping.", + "yaml_valid": true, + "verdict": "APPROVE_AND_MERGE", + "confidence_score": 95, + "summary_reason": "High quality V2-native plugin with active maintenance (pushed 2 days ago), clean MIT-licensed repo, and complete schema-conformant metadata. Not a duplicate of the existing opencode-quota entry (different repo/tool).", + "recommended_comment": "Thank you for this submission, @BillyOutlast / @gilvex! This entry is verified compatible with OpenCode V2 (@opencode/plugin, Plugin.define, ctx domain objects) and meets all awesome-opencode catalog standards. Approved for merge. Note: the PR diff did not include the YAML file contents; please ensure data/plugins/opencode-quota-board.yaml is present with name/repo/tagline/description before merge." + }, + "46": { + "item_type": "PR", + "item_number": 46, + "title": "[Upstream #130] feat: add Opencode Auto Update plugin", + "target_name": "Opencode Auto Update", + "target_repo": "https://github.com/AnganSamadder/opencode-plugin-auto-update", + "category": "plugins", + "worth_adding": true, + "worth_adding_rationale": "Provides genuine utility: background auto-updates for OpenCode plugins with throttling, lock files, and update history. Repository is public, not archived, and pushed within the last year. Not crypto-related, not malicious, and not a duplicate of any existing catalog entry.", + "opencode_v2_status": "V1_LEGACY_NEEDS_MIGRATION", + "opencode_v2_details": "Source (src/index.ts) uses the legacy V1 callback export (`export default async function (ctx) => {...}` returning `{ name, config }`) with no `Plugin.define`, no stable string `id`, and no `@opencode/plugin` dependency \u2014 package.json declares zero dependencies. Installation docs direct users to the removed V1 `plugin` array in `opencode.json`. This plugin will not execute in OpenCode V2 without migration.", + "yaml_valid": true, + "verdict": "NEEDS_V2_UPDATE", + "confidence_score": 92, + "summary_reason": "Good, maintained plugin concept with valid, schema-conformant YAML, but implemented against the legacy OpenCode V1 plugin API and incompatible with OpenCode V2 until migrated to `@opencode/plugin` / `Plugin.define`.", + "recommended_comment": "Thank you for this submission! The entry is well-formed and the auto-update concept is useful for the OpenCode ecosystem. However, this plugin is built on the legacy OpenCode V1 plugin API (default callback export, no `Plugin.define`/stable `id`, targets the removed `plugin` config array in `opencode.json`) and declares no `@opencode/plugin` dependency, so it will not execute in OpenCode V2 without migration. Please migrate to `@opencode/plugin` with `Plugin.define({ id: \"...\", async setup(ctx) {...} })`, use modern `ctx` domain objects, and update the install instructions to reflect V2 (no `plugin` array in config). Once V2-compatible, this is a strong candidate for approval." + } + }, + "processed_issues": {} +} \ No newline at end of file diff --git a/reviews/summary.md b/reviews/summary.md new file mode 100644 index 0000000..0dba9bd --- /dev/null +++ b/reviews/summary.md @@ -0,0 +1,8 @@ +# Awesome-OpenCode Backlog Review Summary + +Autonomous review powered by OpenCode evaluating OpenCode V2 compatibility and catalog quality. + +| Type | # | Title | Target Name | V2 Status | Verdict | Conf | Reason | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| PR | [486](https://github.com/Heretek-AI/awesome-opencode/pull/486) | [Upstream #864] docs: add Quota Boa | Quota Board | `V2_COMPATIBLE` | **`APPROVE_AND_MERGE`** | 95% | High quality V2-native plugin with active maintenance (pushed 2 days ago), clean MIT-licensed repo, and complete schema-conformant metadata. Not a duplicate of the existing opencode-quota entry (different repo/tool). | +| PR | [46](https://github.com/Heretek-AI/awesome-opencode/pull/46) | [Upstream #130] feat: add Opencode | Opencode Auto Update | `V1_LEGACY_NEEDS_MIGRATION` | **`NEEDS_V2_UPDATE`** | 92% | Good, maintained plugin concept with valid, schema-conformant YAML, but implemented against the legacy OpenCode V1 plugin API and incompatible with OpenCode V2 until migrated to `@opencode/plugin` / `Plugin.define`. | diff --git a/scripts/build-site.js b/scripts/build-site.js new file mode 100644 index 0000000..aae6cab --- /dev/null +++ b/scripts/build-site.js @@ -0,0 +1,28 @@ +#!/usr/bin/env node +/** + * Build the static search site into _site/. + * Usage: node scripts/build-site.js [--health ] + * + * Copies site/ and writes _site/registry.json from the catalog. health.json comes from + * `node scripts/health-check.js --out _site/health.json` (the site works without it). + */ + +const fs = require('fs'); +const path = require('path'); +const { execFileSync } = require('child_process'); + +const ROOT = path.join(__dirname, '..'); +const OUT = path.join(ROOT, '_site'); + +fs.mkdirSync(OUT, { recursive: true }); +for (const file of fs.readdirSync(path.join(ROOT, 'site'))) { + fs.copyFileSync(path.join(ROOT, 'site', file), path.join(OUT, file)); +} +execFileSync(process.execPath, [path.join(__dirname, 'export-json.js'), '--output', path.join(OUT, 'registry.json')], { stdio: 'inherit' }); + +const argv = process.argv.slice(2); +if (argv.includes('--health')) { + fs.copyFileSync(path.resolve(argv[argv.indexOf('--health') + 1]), path.join(OUT, 'health.json')); +} +fs.writeFileSync(path.join(OUT, '.nojekyll'), ''); +console.log(`Built site in ${path.relative(ROOT, OUT)}/`); diff --git a/scripts/check-pr.js b/scripts/check-pr.js new file mode 100644 index 0000000..d19b4d0 --- /dev/null +++ b/scripts/check-pr.js @@ -0,0 +1,85 @@ +#!/usr/bin/env node +/** + * The required "validate" check for pull requests. + * Usage: node scripts/check-pr.js --base [--no-probe] [--allow-generated] + * + * --allow-generated is passed only for the README bot's own staged commits (see generate-readme.yml). + * + * Compares HEAD against the merge base with , analyzes the changed files, writes a report to + * $GITHUB_STEP_SUMMARY (when set) and exits 1 on any blocking problem. + */ + +const fs = require('fs'); +const path = require('path'); +const { execFileSync } = require('child_process'); +const { loadCatalog } = require('./utils/catalog'); +const { DATA_FILE_RE, GENERATED_FILES, analyzePullRequest, formatReport } = require('./utils/pr-checks'); + +const ROOT = path.join(__dirname, '..'); +const git = (...args) => execFileSync('git', args, { cwd: ROOT, encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 }); + +function parseArgs(argv) { + const baseIndex = argv.indexOf('--base'); + return { + base: baseIndex !== -1 ? argv[baseIndex + 1] : 'origin/main', + probe: !argv.includes('--no-probe'), + allowGenerated: argv.includes('--allow-generated') + }; +} + +const STATUS = { A: 'added', M: 'modified', D: 'removed', R: 'renamed', C: 'added', T: 'modified' }; + +function changedFiles(mergeBase) { + const changes = []; + for (const line of git('diff', '--name-status', '-M', `${mergeBase}...HEAD`).split('\n').filter(Boolean)) { + const [code, first, second] = line.split('\t'); + const status = STATUS[code[0]] || 'modified'; + if (status === 'renamed') { + changes.push({ path: first, status: 'removed' }); + changes.push({ path: second, status: 'added' }); + } else { + changes.push({ path: first, status }); + } + } + return changes; +} + +async function main() { + const { base, probe, allowGenerated } = parseArgs(process.argv.slice(2)); + const mergeBase = git('merge-base', base, 'HEAD').trim(); + const changes = changedFiles(mergeBase); + + for (const change of changes) { + if (!DATA_FILE_RE.test(change.path) || change.status === 'removed') continue; + change.content = fs.readFileSync(path.join(ROOT, change.path), 'utf8'); + if (change.status === 'modified') { + try { change.baseContent = git('show', `${mergeBase}:${change.path}`); } catch { /* new in base range */ } + } + } + + // Base catalog = current checkout minus/plus this PR's data changes is what analyzePullRequest rebuilds, + // so start from the full head catalog with the changed files removed. + const changedPaths = new Set(changes.map(c => c.path)); + const { entries, errors: loadErrors } = loadCatalog(); + const baseEntries = entries.filter(e => !changedPaths.has(e.file)); + + const result = await analyzePullRequest({ changes, baseEntries, probe }); + if (allowGenerated) result.errors = result.errors.filter(e => !GENERATED_FILES.includes(e.file)); + // Unparseable files anywhere in the catalog break README generation, so they always block + for (const err of loadErrors) { + if (!result.errors.some(e => e.file === err.file)) result.errors.push({ ...err, kind: 'metadata' }); + } + + const report = formatReport(result); + console.log(report); + if (process.env.GITHUB_STEP_SUMMARY) fs.appendFileSync(process.env.GITHUB_STEP_SUMMARY, report + '\n'); + for (const e of result.errors) console.log(`::error file=${e.file}::${e.message.replace(/\n/g, ' ')}`); + for (const w of result.warnings) console.log(`::warning file=${w.file}::${w.message.replace(/\n/g, ' ')}`); + + process.exit(result.errors.length ? 1 : 0); +} + +main().catch(err => { + console.error(err); + process.exit(1); +}); diff --git a/scripts/export-json.js b/scripts/export-json.js index b57f397..0db3c9d 100644 --- a/scripts/export-json.js +++ b/scripts/export-json.js @@ -4,14 +4,13 @@ * Usage: * node scripts/export-json.js --pretty --output dist/registry.json * node scripts/export-json.js --pretty > dist/registry.json + * + * Fails without writing anything if any entry is invalid. */ const fs = require('fs'); const path = require('path'); -const { readYamlDir, slugify } = require('./utils/yaml'); -const { validateEntry, formatValidationErrors } = require('./utils/validation'); - -const CATEGORIES = ['plugins', 'themes', 'agents', 'projects', 'resources']; +const { checkCatalog, formatProblems, loadCatalog } = require('./utils/catalog'); function parseArgs(args) { const outputFlagIndex = args.findIndex((arg) => arg === '--output'); @@ -22,16 +21,6 @@ function parseArgs(args) { return { outputPath, pretty }; } -function buildProductId(entry) { - if (entry._fileName) { - return entry._fileName; - } - if (entry.name) { - return slugify(entry.name); - } - return ''; -} - function sanitizeArray(value, fallback) { if (Array.isArray(value) && value.length > 0) { return value; @@ -39,27 +28,28 @@ function sanitizeArray(value, fallback) { return fallback; } -function mapEntry(entry, category) { - const productId = buildProductId(entry); - if (!productId) { - return null; - } - - const output = { - productId, +// type, productId and the original fields keep their names for downstream consumers (opencode.cafe); +// newer fields are additive. +function mapEntry({ category, id, data }) { + return { + productId: id, type: category, - displayName: entry.name, - repoUrl: entry.repo, - tagline: entry.tagline, - description: entry.description, - scope: sanitizeArray(entry.scope, ['global']), - tags: sanitizeArray(entry.tags, []), - homepageUrl: entry.homepage, - installation: entry.installation, - minVersion: entry.min_version + displayName: data.name, + repoUrl: data.repo, + repoPath: data.path, + npmPackage: data.npm, + tagline: data.tagline, + description: data.description, + kind: data.kind, + also: sanitizeArray(data.also, undefined), + topics: sanitizeArray(data.topics, []), + compat: data.compat || (category === 'plugins' ? 'unknown' : 'n/a'), + scope: sanitizeArray(data.scope, ['global']), + tags: sanitizeArray(data.tags, []), + homepageUrl: data.homepage, + installation: data.installation, + minVersion: data.min_version }; - - return output; } function stripUndefined(data) { @@ -72,87 +62,36 @@ function stripUndefined(data) { return cleaned; } -async function loadEntries() { - const results = []; - const errors = []; - - for (const category of CATEGORIES) { - const categoryPath = path.join(__dirname, '../data', category); - let entries = []; - - try { - entries = await readYamlDir(categoryPath); - } catch (err) { - if (err.code === 'ENOENT') { - continue; - } - throw err; - } - - for (const entry of entries) { - const result = validateEntry(entry, entry._filePath || categoryPath); - if (!result.valid) { - errors.push(formatValidationErrors(result)); - continue; - } - - const mapped = mapEntry(entry, category); - if (mapped) { - results.push(stripUndefined(mapped)); - } - } - } - - return { results, errors }; -} - -async function main() { +function main() { const { outputPath, pretty } = parseArgs(process.argv.slice(2)); - const writeToStdout = !outputPath; - const log = (...args) => { - if (writeToStdout) { - console.error(...args); - } else { - console.log(...args); - } - }; + const log = (...args) => (outputPath ? console.log(...args) : console.error(...args)); - const { results, errors } = await loadEntries(); - - results.sort((a, b) => { - const typeCompare = a.type.localeCompare(b.type); - if (typeCompare !== 0) { - return typeCompare; - } - return a.productId.localeCompare(b.productId); - }); - - if (errors.length > 0) { - for (const error of errors) { - log(error); - } - log(`\n⚠️ Skipped ${errors.length} invalid entr${errors.length === 1 ? 'y' : 'ies'}.`); + const { entries, errors } = loadCatalog(); + const problems = [...errors, ...checkCatalog(entries)]; + if (problems.length > 0) { + log(formatProblems(problems)); + throw new Error(`${problems.length} validation problem(s); nothing was exported`); } + const results = entries.map(e => stripUndefined(mapEntry(e))); + results.sort((a, b) => a.type.localeCompare(b.type) || a.productId.localeCompare(b.productId)); + const json = JSON.stringify(results, null, pretty ? 2 : 0); - if (outputPath) { const outputDir = path.dirname(outputPath); if (outputDir && outputDir !== '.') { fs.mkdirSync(outputDir, { recursive: true }); } - fs.writeFileSync(outputPath, json); + fs.writeFileSync(outputPath, json + '\n'); log(`Saved ${results.length} entries to ${outputPath}`); } else { process.stdout.write(json); } - - if (errors.length > 0) { - process.exit(1); - } } -main().catch((err) => { +try { + main(); +} catch (err) { console.error('Export failed:', err.message); process.exit(1); -}); +} diff --git a/scripts/fmt.js b/scripts/fmt.js new file mode 100644 index 0000000..47dfe5e --- /dev/null +++ b/scripts/fmt.js @@ -0,0 +1,46 @@ +#!/usr/bin/env node +/** + * Rewrite catalog entries in canonical format (key order, safe quoting). + * Usage: node scripts/fmt.js [--check] [file.yaml ...] + * + * --check lists files that would change and exits 1 without writing. + */ + +const fs = require('fs'); +const path = require('path'); +const { loadCatalog, formatProblems } = require('./utils/catalog'); +const { dumpEntry } = require('./utils/format'); + +const ROOT = path.join(__dirname, '..'); + +function main() { + const argv = process.argv.slice(2); + const check = argv.includes('--check'); + const only = argv.filter(a => a.endsWith('.yaml')).map(f => path.relative(ROOT, path.resolve(f))); + + const { entries, errors } = loadCatalog(); + if (errors.length) { + console.error(formatProblems(errors)); + console.error('\nFix the YAML syntax errors above first.'); + process.exit(1); + } + + const changed = []; + for (const entry of entries) { + if (only.length && !only.includes(entry.file)) continue; + const target = path.join(ROOT, entry.file); + const formatted = dumpEntry(entry.data); + if (fs.readFileSync(target, 'utf8') !== formatted) { + changed.push(entry.file); + if (!check) fs.writeFileSync(target, formatted); + } + } + + if (check && changed.length) { + console.error(`${changed.length} file(s) are not in canonical format:\n${changed.map(f => ` ${f}`).join('\n')}\nRun: npm run fmt`); + process.exit(1); + } + console.log(check ? '✓ All entries are formatted.' : `✓ Formatted ${changed.length} file(s).`); +} + +main(); diff --git a/scripts/generate-readme.js b/scripts/generate-readme.js index f43b787..b00157f 100644 --- a/scripts/generate-readme.js +++ b/scripts/generate-readme.js @@ -2,153 +2,124 @@ /** * Generate README.md from YAML files - * Reads all category YAML files, validates them, sorts alphabetically, - * generates HTML, and writes the final README.md + * Loads and validates the whole catalog, groups each category (plugins by primary topic, other + * categories by kind), and writes README.md. Fails without writing anything if any entry is invalid, + * so a single bad file can never publish a README with missing sections. */ +const { CATEGORIES, KINDS, KIND_LABELS, TOPICS, TOPIC_LABELS, V1_SUNSET, checkCatalog, formatProblems, loadCatalog } = require('./utils/catalog'); +const { addedDates } = require('./utils/history'); +const { escapeCell, escapeHtml, readTemplate, replacePlaceholder, generateEntryHtml, writeReadme } = require('./utils/template'); -const path = require('path'); -const { readYamlDir } = require('./utils/yaml'); -const { validateEntry, formatValidationErrors } = require('./utils/validation'); -const { readTemplate, replacePlaceholder, generateEntryHtml, writeReadme } = require('./utils/template'); +const RECENT_COUNT = 15; +const README_WARN_KB = 450; -// Category processing order -const CATEGORIES = ['plugins', 'themes', 'agents', 'projects', 'resources']; - -// Placeholder names for each category -const CATEGORY_PLACEHOLDERS = { - plugins: 'PLUGINS', - themes: 'THEMES', - agents: 'AGENTS', - projects: 'PROJECTS', - resources: 'RESOURCES' +// How each category is subdivided in the README +const GROUP_BY = { + plugins: { field: 'topic', order: TOPICS, labels: TOPIC_LABELS }, + themes: null, + agents: { field: 'kind', order: KINDS, labels: KIND_LABELS }, + projects: { field: 'kind', order: KINDS, labels: KIND_LABELS }, + resources: { field: 'kind', order: KINDS, labels: KIND_LABELS } }; +const byName = (a, b) => a.data.name.toLowerCase().localeCompare(b.data.name.toLowerCase()); + /** * Generate HTML for a single category - * @param {string} categoryName - Category directory name - * @returns {Promise} Generated HTML for all entries in the category + * @param {string} category - Category directory name + * @param {object[]} entries - Entries in this category + * @returns {string} */ -async function generateCategorySection(categoryName) { - const categoryPath = path.join(__dirname, '../data', categoryName); +function generateCategorySection(category, entries) { + const grouping = GROUP_BY[category]; + const render = list => list.sort(byName).map(e => generateEntryHtml(e.data, category)).join('\n\n'); + if (!grouping) return render(entries); - let entries = []; - let errors = []; - - try { - entries = await readYamlDir(categoryPath); - } catch (err) { - // If directory doesn't exist, return empty string - if (err.code === 'ENOENT') { - return { html: '', count: 0, errors: [] }; - } - // Re-throw other errors - throw err; - } - - // Validate and filter entries - const validEntries = []; + const groups = new Map(grouping.order.map(key => [key, []])); for (const entry of entries) { - const result = validateEntry(entry, entry._filePath || path.join(categoryPath, `${entry.name || 'unknown'}.yaml`)); - - if (result.valid) { - validEntries.push(entry); - } else { - const errorMsg = formatValidationErrors(result); - errors.push(errorMsg); - console.error(errorMsg); - } + const key = grouping.field === 'topic' ? entry.data.topics[0] : entry.data.kind; + groups.get(key).push(entry); } + return [...groups] + .filter(([, list]) => list.length > 0) + .map(([key, list]) => `

${grouping.labels[key]} (${list.length})

\n\n${render(list)}`) + .join('\n\n
\n\n'); +} - // Sort alphabetically by name (case-insensitive) - validEntries.sort((a, b) => { - const nameA = (a.name || '').toLowerCase(); - const nameB = (b.name || '').toLowerCase(); - return nameA.localeCompare(nameB); - }); +/** + * One-line catalog summary under the header. + * @param {object[]} entries + * @returns {string} + */ +function generateStats(entries) { + const plugins = entries.filter(e => e.category === 'plugins'); + const count = compat => plugins.filter(e => e.data.compat === compat).length; + return `

${entries.length} entries  •  ${plugins.length} plugins: ` + + `${count('v2')} V2, ${count('v1')} V1 only ` + + `(removed after ${V1_SUNSET}), ${count('unknown')} unverified

`; +} - // Generate HTML for each entry - const htmlParts = validEntries.map(entry => generateEntryHtml(entry)); - - // Join with double newlines for proper spacing - const html = htmlParts.join('\n\n'); - - return { html, count: validEntries.length, errors }; +/** + * Most recently added entries, from git history. + * @param {object[]} entries + * @returns {string} + */ +function generateRecent(entries) { + const dates = addedDates(); + if (dates.size === 0) return '

History unavailable.

'; + const recent = entries + .filter(e => dates.has(e.file)) + .sort((a, b) => dates.get(b.file).localeCompare(dates.get(a.file)) || byName(a, b)) + .slice(0, RECENT_COUNT); + const rows = recent.map(e => `| **[${escapeCell(escapeHtml(e.data.name))}](${e.data.repo})** | ${e.category} | ${escapeCell(escapeHtml(e.data.tagline))} |`); + return ['| Name | Category | Tagline |', '| :--- | :--- | :--- |', ...rows].join('\n'); } /** * Main function to generate the README */ -async function main() { +function main() { console.log('Starting README generation...\n'); - // Read template - let template; - try { - template = readTemplate(); - console.log('Template loaded successfully'); - } catch (err) { - throw new Error(`Failed to read template: ${err.message}`); + const { entries, errors } = loadCatalog(); + const problems = [...errors, ...checkCatalog(entries)]; + if (problems.length > 0) { + console.error(formatProblems(problems)); + throw new Error(`${problems.length} validation problem(s); README.md was not written`); } - // Process each category in order - const results = {}; - let totalEntries = 0; - let allErrors = []; - + let content = readTemplate(); for (const category of CATEGORIES) { - const placeholder = CATEGORY_PLACEHOLDERS[category]; - console.log(`Processing ${category}...`); + const list = entries.filter(e => e.category === category); + const placeholder = category.toUpperCase(); + content = replacePlaceholder(content, placeholder, generateCategorySection(category, list)); + content = replacePlaceholder(content, `COUNT_${placeholder}`, String(list.length)); + console.log(` - ${category}: ${list.length} entries`); + } + content = replacePlaceholder(content, 'STATS', generateStats(entries)); + content = replacePlaceholder(content, 'RECENT', generateRecent(entries)); - try { - const result = await generateCategorySection(category); - results[placeholder] = result.html; - totalEntries += result.count; - allErrors = allErrors.concat(result.errors); - - if (result.count > 0) { - console.log(` - Found ${result.count} valid entries`); - } else { - console.log(` - No entries found`); - } - } catch (err) { - console.error(` - Error processing ${category}: ${err.message}`); - results[placeholder] = ''; - } + // Every entry must appear exactly once + const rendered = (content.match(/
\n {2}/g) || []).length; + if (rendered !== entries.length) { + throw new Error(`rendered ${rendered} entries but the catalog has ${entries.length}; README.md was not written`); + } + if (/\{\{[A-Z_]+\}\}/.test(content)) { + throw new Error(`unreplaced placeholder ${content.match(/\{\{[A-Z_]+\}\}/)[0]}; README.md was not written`); } - // Replace each placeholder in template - let content = template; - for (const [placeholder, html] of Object.entries(results)) { - content = replacePlaceholder(content, placeholder, html); + writeReadme(content); + console.log(`\n✅ Generated README.md with ${entries.length} entries across ${CATEGORIES.length} categories`); + const kb = Math.round(Buffer.byteLength(content) / 1024); + if (kb > README_WARN_KB) { + console.log(`::warning title=README size::README.md is ${kb} KB; GitHub stops rendering large markdown files. Consider trimming descriptions or moving the full list to the site.`); } - - // Write final README - try { - writeReadme(content); - console.log('\nREADME.md written successfully'); - } catch (err) { - throw new Error(`Failed to write README.md: ${err.message}`); - } - - // Log summary - const errorCount = allErrors.length; - if (errorCount > 0) { - console.log(`\n⚠️ Generated README.md with ${totalEntries} entries across ${CATEGORIES.length} categories`); - console.log(` ${errorCount} validation error(s) were logged (affected entries were skipped)`); - } else { - console.log(`\n✅ Generated README.md with ${totalEntries} entries across ${CATEGORIES.length} categories`); - } - - return { totalEntries, categoryCount: CATEGORIES.length, errorCount }; } -// Execute main function -main() - .then(({ totalEntries, categoryCount, errorCount }) => { - process.exit(errorCount > 0 ? 1 : 0); - }) - .catch(err => { - console.error('\n❌ Generation failed:', err.message); - process.exit(1); - }); +try { + main(); +} catch (err) { + console.error('\n❌ Generation failed:', err.message); + process.exit(1); +} diff --git a/scripts/health-check.js b/scripts/health-check.js new file mode 100644 index 0000000..6b646f4 --- /dev/null +++ b/scripts/health-check.js @@ -0,0 +1,285 @@ +#!/usr/bin/env node +/** + * Catalog health: link rot, archived/deprecated targets, renames, staleness and the V1 sunset. + * + * Usage: node scripts/health-check.js [options] + * --out write per-entry health JSON (used by the site) + * --issue create/update the rolling "Catalog health report" issue (holds grace-period state) + * --apply-renames rewrite repo URLs of renamed/transferred repos in the working tree + * --apply-removals delete entries dead for GRACE_DAYS+ (and V1 plugins after the sunset date) + * --open-prs open/update bot PRs for renames (bot/health-renames) and removals (bot/health-removals) + * --pr-body write a markdown summary of the applied changes + * --dry-run print the report instead of writing the issue + * + * Policy (docs/policy.md): archived, 404 or npm-deprecated targets are removed after a 30-day grace + * period; renamed repos are updated automatically; inactivity alone never removes an entry. + */ + +const fs = require('fs'); +const path = require('path'); +const { V1_SUNSET, loadCatalog, parseRepoUrl } = require('./utils/catalog'); +const { dumpEntry } = require('./utils/format'); +const { getNpmLatest, getRepos, rest } = require('./utils/github'); +const { openPullRequest } = require('./utils/git-pr'); +const { REPO, ensureLabels } = require('./utils/repo'); + +const ROOT = path.join(__dirname, '..'); +const GRACE_DAYS = 30; +const DAY = 24 * 60 * 60 * 1000; +const ISSUE_TITLE = 'Catalog health report'; +const STATE_RE = //s; + +function parseArgs(argv) { + const value = flag => (argv.includes(flag) ? argv[argv.indexOf(flag) + 1] : null); + return { + out: value('--out'), + issue: argv.includes('--issue'), + applyRenames: argv.includes('--apply-renames'), + applyRemovals: argv.includes('--apply-removals'), + openPrs: argv.includes('--open-prs'), + prBody: value('--pr-body'), + dryRun: argv.includes('--dry-run') + }; +} + +const today = () => new Date().toISOString().slice(0, 10); +const daysSince = date => Math.floor((Date.now() - new Date(date).getTime()) / DAY); + +async function checkUrl(url) { + try { + const res = await fetch(url, { method: 'GET', redirect: 'follow', headers: { 'User-Agent': 'awesome-opencode-bot' } }); + return res.status; + } catch { + return 0; + } +} + +/** + * Collect health facts for every entry. + * @returns {Promise>} keyed by entry file + */ +async function collect(entries) { + const health = new Map(); + const github = entries.map(e => ({ e, p: parseRepoUrl(e.data.repo) })) + .filter(x => x.p && x.p.host === 'github.com' && !/\/discussions\//.test(x.e.data.repo)); + const repos = await getRepos(github.map(x => ({ owner: x.p.owner, name: x.p.name }))); + + for (const e of entries) { + const h = { status: 'active' }; + const p = parseRepoUrl(e.data.repo); + const gist = /^https:\/\/gist\.github\.com\/[^/]+\/([0-9a-f]+)/.exec(e.data.repo); + if (gist) { + const { status } = await rest(`/gists/${gist[1]}`); + if (status === 404) h.status = 'missing'; + } else if (p && p.host === 'github.com' && !/\/discussions\//.test(e.data.repo)) { + const repo = repos.get(`${p.owner}/${p.name}`); + if (!repo) { + h.status = 'missing'; + } else { + h.stars = repo.stargazerCount; + h.pushedAt = repo.pushedAt; + h.license = repo.licenseInfo ? repo.licenseInfo.spdxId : null; + if (repo.nameWithOwner.toLowerCase() !== `${p.owner}/${p.name}`.toLowerCase()) h.renamedTo = `https://github.com/${repo.nameWithOwner}`; + if (repo.isArchived) h.status = 'archived'; + else if (daysSince(repo.pushedAt) >= 365) h.status = 'stale'; + else if (daysSince(repo.pushedAt) >= 180) h.status = 'quiet'; + } + } else { + const status = await checkUrl(e.data.repo); + if (status === 404 || status === 410) h.status = 'missing'; + } + health.set(e.file, h); + } + + await Promise.all(entries.filter(e => e.data.npm).map(async e => { + const doc = await getNpmLatest(e.data.npm).catch(() => undefined); + const h = health.get(e.file); + if (doc === null) h.npmMissing = true; + else if (doc && doc.deprecated) { + h.deprecated = String(doc.deprecated).slice(0, 200); + if (h.status !== 'missing' && h.status !== 'archived') h.status = 'deprecated'; + } + })); + + return health; +} + +async function findIssue() { + const { data } = await rest(`/repos/${REPO}/issues?state=open&labels=health&per_page=20`); + return Array.isArray(data) ? data.find(i => i.title === ISSUE_TITLE && !i.pull_request) : null; +} + +function readState(issue) { + const match = issue && STATE_RE.exec(issue.body || ''); + try { return match ? JSON.parse(match[1]) : {}; } catch { return {}; } +} + +/** + * Track when each entry was first seen dead; drop entries that recovered. + */ +function updateState(previous, entries, health) { + const state = {}; + for (const e of entries) { + const h = health.get(e.file); + if (['missing', 'archived', 'deprecated'].includes(h.status)) { + state[e.file] = { since: (previous[e.file] && previous[e.file].since) || today(), reason: h.status }; + } + } + return state; +} + +function removalCandidates(entries, health, state) { + const out = []; + for (const e of entries) { + const s = state[e.file]; + if (s && daysSince(s.since) >= GRACE_DAYS) out.push({ entry: e, reason: `${s.reason} since ${s.since}` }); + else if (e.category === 'plugins' && e.data.compat === 'v1' && today() >= V1_SUNSET) out.push({ entry: e, reason: `V1-only plugin past the ${V1_SUNSET} sunset` }); + } + return out; +} + +function report(entries, health, state) { + const link = e => `[${e.data.name}](${e.data.repo}) \`${e.file}\``; + const rows = (list, fmt) => list.length ? list.map(fmt).join('\n') : '_None._'; + const dead = entries.filter(e => state[e.file]); + const renamed = entries.filter(e => health.get(e.file).renamedTo); + const plugins = entries.filter(e => e.category === 'plugins'); + const v1 = plugins.filter(e => e.data.compat === 'v1'); + const unknown = plugins.filter(e => e.data.compat === 'unknown'); + const stale = entries.filter(e => health.get(e.file).status === 'stale'); + const npmMissing = entries.filter(e => health.get(e.file).npmMissing); + + return [ + `Updated ${today()} by the nightly health check. Policy: [docs/policy.md](https://github.com/Heretek-AI/awesome-opencode/blob/main/docs/policy.md).`, + '', + `| Check | Count |`, + `| :--- | ---: |`, + `| Entries | ${entries.length} |`, + `| Archived, missing or deprecated (removed after ${GRACE_DAYS} days) | ${dead.length} |`, + `| Renamed or transferred (fixed by bot PR) | ${renamed.length} |`, + `| V1-only plugins (removed after ${V1_SUNSET}) | ${v1.length} |`, + `| Plugins with unverified compatibility | ${unknown.length} |`, + `| No push for a year (badge only, not removed) | ${stale.length} |`, + '', + `### Archived, missing or deprecated`, + rows(dead, e => `- [ ] ${link(e)}: ${state[e.file].reason} since ${state[e.file].since}${health.get(e.file).deprecated ? ` ("${health.get(e.file).deprecated.replace(/[\r\n]+/g, ' ')}")` : ''}, removal PR in ${Math.max(0, GRACE_DAYS - daysSince(state[e.file].since))} day(s)`), + '', + '### Renamed or transferred', + rows(renamed, e => `- ${link(e)} → ${health.get(e.file).renamedTo}`), + '', + '### Plugins with unverified compatibility', + 'The V2 check could not decide. Verify by hand and set `compat`, or add `npm`/`path` so the check can find the package.', + '', + rows(unknown, e => `- [ ] ${link(e)}`), + '', + `
V1-only plugins (${v1.length}), removed after ${V1_SUNSET} unless migrated`, + '', + rows(v1, e => `- ${link(e)}`), + '', + '
', + '', + `
npm package not found (${npmMissing.length})`, + '', + rows(npmMissing, e => `- ${link(e)}: \`${e.data.npm}\``), + '', + '
', + '', + `
No push for a year (${stale.length})`, + '', + rows(stale, e => `- ${link(e)}: last push ${String(health.get(e.file).pushedAt).slice(0, 10)}`), + '', + '
', + '', + `` + ].join('\n'); +} + +async function main() { + const opts = parseArgs(process.argv.slice(2)); + const { entries, errors } = loadCatalog(); + if (errors.length) throw new Error(`catalog has unparseable files: ${errors.map(e => e.file).join(', ')}`); + + const health = await collect(entries); + const issue = await findIssue(); + const state = updateState(readState(issue), entries, health); + + if (opts.out) { + const out = { + generated: new Date().toISOString(), + entries: Object.fromEntries(entries.map(e => [`${e.category}/${e.id}`, health.get(e.file)])) + }; + fs.mkdirSync(path.dirname(path.resolve(opts.out)), { recursive: true }); + fs.writeFileSync(opts.out, JSON.stringify(out)); + console.log(`Wrote ${opts.out}`); + } + + const body = report(entries, health, state); + if (opts.issue && !opts.dryRun) { + await ensureLabels(['health']); + if (issue) await rest(`/repos/${REPO}/issues/${issue.number}`, { method: 'PATCH', body: { body } }); + else await rest(`/repos/${REPO}/issues`, { method: 'POST', body: { title: ISSUE_TITLE, body, labels: ['health'] } }); + console.log(`${issue ? 'Updated' : 'Created'} the "${ISSUE_TITLE}" issue`); + } else if (opts.dryRun) { + console.log(body); + } + + const renames = { files: {}, lines: [] }; + for (const e of entries) { + const to = health.get(e.file).renamedTo; + if (!to) continue; + renames.files[e.file] = dumpEntry({ ...e.data, repo: to }); + renames.lines.push(`- \`${e.file}\`: ${e.data.repo} → ${to}`); + } + const removals = { files: {}, lines: [] }; + for (const { entry, reason } of removalCandidates(entries, health, state)) { + removals.files[entry.file] = null; + removals.lines.push(`- \`${entry.file}\` ([${entry.data.name}](${entry.data.repo})): ${reason}`); + } + + const summary = []; + if (opts.applyRenames) { + for (const [file, text] of Object.entries(renames.files)) fs.writeFileSync(path.join(ROOT, file), text); + summary.push(...renames.lines); + console.log(`Applied ${renames.lines.length} rename(s)`); + } + if (opts.applyRemovals) { + for (const file of Object.keys(removals.files)) fs.unlinkSync(path.join(ROOT, file)); + summary.push(...removals.lines); + console.log(`Applied ${removals.lines.length} removal(s)`); + } + if (opts.prBody) fs.writeFileSync(opts.prBody, summary.join('\n') + '\n'); + + if (opts.openPrs) { + if (renames.lines.length) { + const pr = await openPullRequest({ + branch: 'bot/health-renames', + files: renames.files, + title: 'chore: follow renamed or transferred repositories', + body: ['The nightly health check found entries whose GitHub repository was renamed or transferred.', '', ...renames.lines].join('\n'), + labels: ['health'], + dryRun: opts.dryRun + }); + if (pr) console.log(`Renames: #${pr.number}`); + } + if (removals.lines.length) { + const pr = await openPullRequest({ + branch: 'bot/health-removals', + files: removals.files, + title: 'chore: remove dead or sunset catalog entries', + body: [`These entries have been archived, missing or deprecated for ${GRACE_DAYS}+ days, or are V1-only plugins past the ${V1_SUNSET} sunset (see [docs/policy.md](https://github.com/Heretek-AI/awesome-opencode/blob/main/docs/policy.md)). Close this PR to keep them; the next run will propose them again unless the target recovers.`, '', ...removals.lines].join('\n'), + labels: ['health'], + dryRun: opts.dryRun + }); + if (pr) console.log(`Removals: #${pr.number}`); + } + } + + const counts = {}; + for (const h of health.values()) counts[h.status] = (counts[h.status] || 0) + 1; + console.log('status counts:', JSON.stringify(counts)); +} + +main().catch(err => { + console.error(err); + process.exit(1); +}); diff --git a/scripts/import/export-discussions.py b/scripts/import/export-discussions.py new file mode 100644 index 0000000..5b6289d --- /dev/null +++ b/scripts/import/export-discussions.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python3 +""" +Exports all 75 discussions from upstream awesome-opencode/awesome-opencode +to docs/archive/upstream-discussions.md for historical documentation and link preservation. +""" + +import json +import os +import subprocess +import sys +import urllib.request + +UPSTREAM_OWNER = "awesome-opencode" +UPSTREAM_NAME = "awesome-opencode" +OUTPUT_FILE = os.path.join(os.path.dirname(__file__), "../../docs/archive/upstream-discussions.md") + +def get_token(): + token = os.environ.get("GITHUB_TOKEN") + if not token: + try: + token = subprocess.check_output(["gh", "auth", "token"], text=True).strip() + except Exception as e: + sys.exit(f"Failed to get GitHub token: {e}") + return token + +TOKEN = get_token() + +QUERY = """ +query($cursor: String) { + repository(owner: "awesome-opencode", name: "awesome-opencode") { + discussions(first: 50, after: $cursor) { + pageInfo { + hasNextPage + endCursor + } + nodes { + number + title + body + url + createdAt + author { + login + } + category { + name + } + comments(first: 50) { + nodes { + author { + login + } + createdAt + body + } + } + } + } + } +} +""" + +def fetch_all_discussions(): + discussions = [] + cursor = None + headers = { + "Authorization": f"bearer {TOKEN}", + "Content-Type": "application/json", + "User-Agent": "Heretek-Discussions-Archive" + } + + while True: + payload = {"query": QUERY, "variables": {"cursor": cursor}} + req = urllib.request.Request( + "https://api.github.com/graphql", + data=json.dumps(payload).encode("utf-8"), + headers=headers + ) + with urllib.request.urlopen(req) as resp: + data = json.loads(resp.read().decode("utf-8")) + + repo_data = data.get("data", {}).get("repository", {}) + disc_conn = repo_data.get("discussions", {}) + nodes = disc_conn.get("nodes", []) + discussions.extend(nodes) + + page_info = disc_conn.get("pageInfo", {}) + if page_info.get("hasNextPage"): + cursor = page_info.get("endCursor") + else: + break + + discussions.sort(key=lambda d: d["number"]) + return discussions + +def main(): + print("Fetching upstream discussions via GraphQL...") + discussions = fetch_all_discussions() + print(f"Fetched {len(discussions)} discussions. Writing archive to {OUTPUT_FILE}...") + + os.makedirs(os.path.dirname(OUTPUT_FILE), exist_ok=True) + with open(OUTPUT_FILE, "w", encoding="utf-8") as f: + f.write("# Upstream GitHub Discussions Archive\n\n") + f.write("> **Notice**: This document preserves historical GitHub Discussions from [`awesome-opencode/awesome-opencode`](https://github.com/awesome-opencode/awesome-opencode/discussions) as part of the hard fork by Heretek-AI.\n\n") + f.write(f"Total Discussions Archived: **{len(discussions)}**\n\n---\n\n") + + for d in discussions: + num = d["number"] + title = d["title"] + author = d["author"]["login"] if d.get("author") else "ghost" + created_at = d["createdAt"] + category = d.get("category", {}).get("name", "General") + url = d["url"] + body = d.get("body") or "*No content provided.*" + comments = d.get("comments", {}).get("nodes", []) + + f.write(f"## Discussion #{num}: {title}\n\n") + f.write(f"- **Original URL**: [{url}]({url})\n") + f.write(f"- **Author**: [@{author}](https://github.com/{author})\n") + f.write(f"- **Created At**: `{created_at}`\n") + f.write(f"- **Category**: `{category}`\n\n") + f.write("### Post Content\n\n") + f.write(f"{body}\n\n") + + if comments: + f.write(f"### Comments ({len(comments)})\n\n") + for c in comments: + c_author = c["author"]["login"] if c.get("author") else "ghost" + c_created = c["createdAt"] + c_body = c.get("body") or "" + f.write(f"#### [@{c_author}](https://github.com/{c_author}) commented on `{c_created}`:\n\n") + f.write(f"{c_body}\n\n") + + f.write("---\n\n") + + print(f"Successfully archived {len(discussions)} discussions to {OUTPUT_FILE}") + +if __name__ == "__main__": + main() diff --git a/scripts/import/import-issues.py b/scripts/import/import-issues.py new file mode 100644 index 0000000..98456ad --- /dev/null +++ b/scripts/import/import-issues.py @@ -0,0 +1,231 @@ +#!/usr/bin/env python3 +""" +Imports all issues from awesome-opencode/awesome-opencode to Heretek-AI/awesome-opencode +using the GitHub Issue Import API (golden-comet-preview) to preserve timestamps, +closed status, and comments without generating spam notifications. +""" + +import json +import os +import re +import subprocess +import sys +import time +import urllib.request +import urllib.error + +UPSTREAM_REPO = "awesome-opencode/awesome-opencode" +TARGET_REPO = "Heretek-AI/awesome-opencode" +MAPPING_FILE = os.path.join(os.path.dirname(__file__), "upstream_issues_map.json") + +def get_token(): + token = os.environ.get("GITHUB_TOKEN") + if not token: + try: + token = subprocess.check_output(["gh", "auth", "token"], text=True).strip() + except Exception as e: + sys.exit(f"Failed to get GitHub token via gh CLI: {e}") + return token + +TOKEN = get_token() + +def gh_api_request(url, method="GET", data=None, accept="application/vnd.github.v3+json"): + headers = { + "Authorization": f"token {TOKEN}", + "Accept": accept, + "User-Agent": "Heretek-HardFork-Migration" + } + body = None + if data is not None: + body = json.dumps(data).encode("utf-8") + headers["Content-Type"] = "application/json" + + req = urllib.request.Request(url, data=body, headers=headers, method=method) + try: + with urllib.request.urlopen(req) as resp: + content = resp.read().decode("utf-8") + return json.loads(content) if content else {} + except urllib.error.HTTPError as e: + error_body = e.read().decode("utf-8") + print(f"HTTPError {e.code} for {method} {url}: {error_body}", file=sys.stderr) + raise + +def sanitize_mentions(text): + if not text: + return "" + # Avoid triggering accidental @mentions by converting @username to markdown links + # but ignore email addresses (e.g. user@domain.com) and code blocks + def replace_mention(match): + prefix = match.group(1) + username = match.group(2) + return f"{prefix}[@{username}](https://github.com/{username})" + + # Match @username when preceded by start of line or whitespace + return re.sub(r'(^|[\s(])@([a-zA-Z0-9_\-]+)', replace_mention, text) + +def fetch_upstream_issues(): + print(f"Fetching issues from {UPSTREAM_REPO}...") + issues = [] + page = 1 + while True: + url = f"https://api.github.com/repos/{UPSTREAM_REPO}/issues?state=all&per_page=100&page={page}&direction=asc" + items = gh_api_request(url) + if not items: + break + for item in items: + if "pull_request" not in item: + issues.append(item) + page += 1 + + issues.sort(key=lambda x: x["number"]) + print(f"Found {len(issues)} upstream issues (excluding PRs).") + return issues + +def fetch_comments(comments_url): + all_comments = [] + page = 1 + while True: + url = f"{comments_url}?per_page=100&page={page}" + items = gh_api_request(url) + if not items: + break + all_comments.extend(items) + page += 1 + return all_comments + +def import_issue(issue, comments): + num = issue["number"] + title = issue["title"] + state = issue["state"].upper() + author = issue["user"]["login"] if issue.get("user") else "unknown" + created_at = issue["created_at"] + closed_at = issue.get("closed_at") + raw_body = issue.get("body") or "*No description provided.*" + sanitized_body = sanitize_mentions(raw_body) + + provenance_banner = ( + f"> [!NOTE]\n" + f"> **Imported from upstream issue**: [{UPSTREAM_REPO}#{num}](https://github.com/{UPSTREAM_REPO}/issues/{num})\n" + f"> **Original Author**: [@{author}](https://github.com/{author})\n" + f"> **Created At**: `{created_at}`\n" + f"> **Original State**: `{state}`" + ) + if closed_at: + provenance_banner += f"\n> **Closed At**: `{closed_at}`" + + full_body = f"{provenance_banner}\n\n---\n\n{sanitized_body}" + + imported_comments = [] + for c in comments: + c_author = c["user"]["login"] if c.get("user") else "unknown" + c_created_at = c["created_at"] + c_body = sanitize_mentions(c.get("body") or "") + c_banner = f"> **Comment by [@{c_author}](https://github.com/{c_author}) on `{c_created_at}`**:" + imported_comments.append({ + "created_at": c_created_at, + "body": f"{c_banner}\n\n{c_body}" + }) + + payload = { + "issue": { + "title": f"[Upstream #{num}] {title}", + "body": full_body, + "created_at": created_at, + "closed": (state == "CLOSED"), + "labels": [l["name"] for l in issue.get("labels", [])] + } + } + if closed_at and state == "CLOSED": + payload["issue"]["closed_at"] = closed_at + if imported_comments: + payload["comments"] = imported_comments + + import_url = f"https://api.github.com/repos/{TARGET_REPO}/import/issues" + res = gh_api_request( + import_url, + method="POST", + data=payload, + accept="application/vnd.github.golden-comet-preview+json" + ) + + poll_url = res.get("url") + if not poll_url: + return res + + # Poll status until imported + for _ in range(30): + time.sleep(1.0) + status_res = gh_api_request( + poll_url, + method="GET", + accept="application/vnd.github.golden-comet-preview+json" + ) + status = status_res.get("status") + if status == "imported": + return status_res + elif status == "failed": + print(f"Import failed for upstream #{num}: {status_res}", file=sys.stderr) + return status_res + + return status_res + +def load_mapping(): + if os.path.exists(MAPPING_FILE): + with open(MAPPING_FILE, "r") as f: + return json.load(f) + return {} + +def save_mapping(mapping): + with open(MAPPING_FILE, "w") as f: + json.dump(mapping, f, indent=2) + +def main(): + mapping = load_mapping() + issues = fetch_upstream_issues() + print(f"Total upstream issues to process: {len(issues)}") + + for idx, issue in enumerate(issues, 1): + num = issue["number"] + if str(num) in mapping: + print(f"[{idx}/{len(issues)}] Upstream #{num} already imported as {mapping[str(num)]['issue_url']}. Skipping.") + continue + + print(f"[{idx}/{len(issues)}] Importing Upstream #{num}: {issue['title'][:50]}...") + comments = [] + if issue.get("comments", 0) > 0 and issue.get("comments_url"): + comments = fetch_comments(issue["comments_url"]) + + retries = 3 + while retries > 0: + try: + res = import_issue(issue, comments) + issue_url = res.get("issue_url") + print(f" ✓ Imported upstream #{num} -> {issue_url}") + mapping[str(num)] = { + "upstream_number": num, + "title": issue["title"], + "state": issue["state"], + "import_id": res.get("id"), + "issue_url": issue_url + } + save_mapping(mapping) + time.sleep(1.5) # Avoid secondary rate limits + break + except urllib.error.HTTPError as e: + if e.code in (403, 429): + print(" Rate limited, sleeping 30s...", file=sys.stderr) + time.sleep(30) + retries -= 1 + else: + print(f" Error importing #{num}: {e}", file=sys.stderr) + break + except Exception as e: + print(f" Unexpected error importing #{num}: {e}", file=sys.stderr) + time.sleep(2) + retries -= 1 + + print("\nIssue migration complete!") + print(f"Total imported issues: {len(mapping)} / {len(issues)}") + +if __name__ == "__main__": + main() diff --git a/scripts/import/import-prs.py b/scripts/import/import-prs.py new file mode 100644 index 0000000..1c3cedd --- /dev/null +++ b/scripts/import/import-prs.py @@ -0,0 +1,200 @@ +#!/usr/bin/env python3 +""" +Imports all open pull requests from awesome-opencode/awesome-opencode to Heretek-AI/awesome-opencode: +1. Pushes PR commit refs to origin branches (upstream-pr/) +2. Recreates the PRs on Heretek-AI/awesome-opencode against main with complete provenance and author attribution. +3. Automatically tracks progress in upstream_prs_map.json so runs are idempotent and resumable. +""" + +import json +import os +import re +import subprocess +import sys +import time +import urllib.request +import urllib.error + +UPSTREAM_REPO = "awesome-opencode/awesome-opencode" +TARGET_REPO = "Heretek-AI/awesome-opencode" +MAPPING_FILE = os.path.join(os.path.dirname(__file__), "upstream_prs_map.json") + +def get_token(): + token = os.environ.get("GITHUB_TOKEN") + if not token: + try: + token = subprocess.check_output(["gh", "auth", "token"], text=True).strip() + except Exception as e: + sys.exit(f"Failed to get GitHub token via gh CLI: {e}") + return token + +TOKEN = get_token() + +def gh_api_request(url, method="GET", data=None): + headers = { + "Authorization": f"token {TOKEN}", + "Accept": "application/vnd.github.v3+json", + "User-Agent": "Heretek-HardFork-PR-Migration" + } + body = None + if data is not None: + body = json.dumps(data).encode("utf-8") + headers["Content-Type"] = "application/json" + + req = urllib.request.Request(url, data=body, headers=headers, method=method) + try: + with urllib.request.urlopen(req) as resp: + content = resp.read().decode("utf-8") + return json.loads(content) if content else {} + except urllib.error.HTTPError as e: + error_body = e.read().decode("utf-8") + print(f"HTTPError {e.code} for {method} {url}: {error_body}", file=sys.stderr) + raise + +def sanitize_mentions(text): + if not text: + return "" + def replace_mention(match): + prefix = match.group(1) + username = match.group(2) + return f"{prefix}[@{username}](https://github.com/{username})" + return re.sub(r'(^|[\s(])@([a-zA-Z0-9_\-]+)', replace_mention, text) + +def fetch_upstream_open_prs(): + print(f"Fetching open PRs from {UPSTREAM_REPO}...") + cmd = [ + "gh", "pr", "list", + "-R", UPSTREAM_REPO, + "--state", "open", + "--limit", "600", + "--json", "number,title,body,author,createdAt,headRefName,url" + ] + out = subprocess.check_output(cmd, text=True) + prs = json.loads(out) + prs.sort(key=lambda x: x["number"]) + print(f"Found {len(prs)} open PRs on upstream.") + return prs + +def push_pr_branches_in_batches(prs, batch_size=50): + print(f"Checking and pushing {len(prs)} PR branches to origin...") + refspecs = [] + for pr in prs: + num = pr["number"] + local_ref = f"refs/remotes/upstream-pr/{num}" + # verify local ref exists + res = subprocess.run(["git", "rev-parse", "--verify", local_ref], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + if res.returncode == 0: + refspecs.append(f"{local_ref}:refs/heads/upstream-pr/{num}") + else: + print(f"Warning: local ref {local_ref} not found for PR #{num}!", file=sys.stderr) + + for i in range(0, len(refspecs), batch_size): + chunk = refspecs[i:i + batch_size] + print(f"Pushing branches batch {i+1} to {min(i + batch_size, len(refspecs))} of {len(refspecs)}...") + cmd = ["git", "push", "origin"] + chunk + subprocess.check_call(cmd) + + print("All PR branches pushed successfully!") + +def load_mapping(): + if os.path.exists(MAPPING_FILE): + with open(MAPPING_FILE, "r") as f: + return json.load(f) + return {} + +def save_mapping(mapping): + with open(MAPPING_FILE, "w") as f: + json.dump(mapping, f, indent=2) + +def create_target_pr(pr): + num = pr["number"] + title = pr["title"] + author = pr["author"]["login"] if pr.get("author") else "unknown" + created_at = pr["createdAt"] + head_ref = pr.get("headRefName", "branch") + sanitized_body = sanitize_mentions(pr.get("body") or "*No description provided.*") + + body = ( + f"> [!NOTE]\n" + f"> **Original Pull Request**: [{UPSTREAM_REPO}#{num}](https://github.com/{UPSTREAM_REPO}/pull/{num})\n" + f"> **Original Author**: [@{author}](https://github.com/{author})\n" + f"> **Submitted At**: `{created_at}`\n" + f"> **Original Branch**: `{head_ref}`\n\n" + f"---\n\n" + f"{sanitized_body}" + ) + + url = f"https://api.github.com/repos/{TARGET_REPO}/pulls" + payload = { + "title": f"[Upstream #{num}] {title}", + "head": f"upstream-pr/{num}", + "base": "main", + "body": body, + "maintainer_can_modify": True + } + return gh_api_request(url, method="POST", data=payload) + +def main(): + prs = fetch_upstream_open_prs() + mapping = load_mapping() + + # Step 1: Ensure all branches are pushed to origin + push_pr_branches_in_batches(prs) + + # Step 2: Create PRs on GitHub + print(f"\nCreating {len(prs)} Pull Requests on {TARGET_REPO}...") + for idx, pr in enumerate(prs, 1): + num = pr["number"] + if str(num) in mapping: + print(f"[{idx}/{len(prs)}] PR #{num} already migrated as {mapping[str(num)]['pr_url']}. Skipping.") + continue + + print(f"[{idx}/{len(prs)}] Creating PR for Upstream #{num}: {pr['title'][:50]}...") + retries = 5 + backoff = 30 + while retries > 0: + try: + new_pr = create_target_pr(pr) + pr_url = new_pr.get("html_url") + new_num = new_pr.get("number") + print(f" ✓ Created PR #{new_num} -> {pr_url}") + mapping[str(num)] = { + "upstream_number": num, + "new_pr_number": new_num, + "pr_url": pr_url, + "title": pr["title"] + } + save_mapping(mapping) + time.sleep(1.8) # Rate limiting sleep + break + except urllib.error.HTTPError as e: + if e.code in (403, 429): + print(f" Secondary rate limit hit! Sleeping for {backoff}s before retry...", file=sys.stderr) + time.sleep(backoff) + backoff *= 2 + retries -= 1 + elif e.code == 422: + # Likely branch has no diff against main or was already merged/empty + error_text = str(e) + print(f" Unprocessable Entity (422) for PR #{num} (possibly already merged or identical to main). Recording as skipped.", file=sys.stderr) + mapping[str(num)] = { + "upstream_number": num, + "status": "skipped_422", + "title": pr["title"] + } + save_mapping(mapping) + break + else: + print(f" HTTP error {e.code} for PR #{num}: {e}", file=sys.stderr) + time.sleep(5) + retries -= 1 + except Exception as e: + print(f" Unexpected error for PR #{num}: {e}", file=sys.stderr) + time.sleep(5) + retries -= 1 + + print("\nPR migration complete!") + print(f"Total processed PRs: {len(mapping)} / {len(prs)}") + +if __name__ == "__main__": + main() diff --git a/scripts/import/upstream_issues_map.json b/scripts/import/upstream_issues_map.json new file mode 100644 index 0000000..c2e6901 --- /dev/null +++ b/scripts/import/upstream_issues_map.json @@ -0,0 +1,303 @@ +{ + "24": { + "upstream_number": 24, + "title": "Add plugin sections", + "state": "closed", + "import_id": 16769974, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/3" + }, + "67": { + "upstream_number": 67, + "title": "Samual", + "state": "closed", + "import_id": 16769975, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/4" + }, + "99": { + "upstream_number": 99, + "title": "change all https://github.com/sst links to https://github.com/anomalyco", + "state": "closed", + "import_id": 16769976, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/5" + }, + "100": { + "upstream_number": 100, + "title": "Incorrect link for the Smart Voice Notify https://github.com/MasuRii/opencode-smart-voice-notify", + "state": "closed", + "import_id": 16769977, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/6" + }, + "156": { + "upstream_number": 156, + "title": "\ud83d\udc1b OpenCode v1.1.50 MCP Bug - All MCP Tools Failing", + "state": "closed", + "import_id": 16769978, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/7" + }, + "190": { + "upstream_number": 190, + "title": "[Bug]: Not reading github copilot premium request usage correctly", + "state": "closed", + "import_id": 16769979, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/8" + }, + "195": { + "upstream_number": 195, + "title": "Offering to help maintain the list", + "state": "closed", + "import_id": 16769980, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/9" + }, + "216": { + "upstream_number": 216, + "title": "Add SuperLocalMemory \u2014 Memory MCP server compatible with OpenCode", + "state": "open", + "import_id": 16769981, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/10" + }, + "228": { + "upstream_number": 228, + "title": "Add opencode-remote-control: Multi-platform remote control via Telegram/Feishu/WeChat", + "state": "open", + "import_id": 16769982, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/11" + }, + "230": { + "upstream_number": 230, + "title": "Add zosma-qa \u2014 QA agents for OpenCode", + "state": "open", + "import_id": 16769983, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/12" + }, + "236": { + "upstream_number": 236, + "title": "Add AnveVoice \u2014 Voice AI Plugin for OpenCode Agents", + "state": "open", + "import_id": 16769984, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/13" + }, + "240": { + "upstream_number": 240, + "title": "Add Clarvia \u2014 AEO quality scanner for MCP tools and AI agents", + "state": "closed", + "import_id": 16769985, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/14" + }, + "241": { + "upstream_number": 241, + "title": "Add dreampowers: A complete AI skill set for Chinese novel writing", + "state": "open", + "import_id": 16769986, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/15" + }, + "242": { + "upstream_number": 242, + "title": "Consider listing in awesome-codex-plugins", + "state": "open", + "import_id": 16769987, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/16" + }, + "265": { + "upstream_number": 265, + "title": "Add opencode-auto-resume", + "state": "closed", + "import_id": 16769988, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/17" + }, + "280": { + "upstream_number": 280, + "title": "Add opencode-easy-workflow", + "state": "closed", + "import_id": 16769989, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/18" + }, + "295": { + "upstream_number": 295, + "title": "The comportement of home end is unexpected when we are writing a new prompt", + "state": "open", + "import_id": 16769990, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/19" + }, + "307": { + "upstream_number": 307, + "title": "Add Skills\u5b9d (skilery.com) - Chinese AI Skills Marketplace", + "state": "open", + "import_id": 16769991, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/20" + }, + "332": { + "upstream_number": 332, + "title": "Add \u4e2d\u533b\u4e4b\u5fc3 Oh My TCM Powers", + "state": "open", + "import_id": 16769992, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/21" + }, + "333": { + "upstream_number": 333, + "title": "Add Qi Men Dun Jia: Eight Gates Huaqi Array (\u5947\u95e8\u9041\u7532 \u516b\u95e8\u5316\u6c14\u9635)", + "state": "open", + "import_id": 16769993, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/22" + }, + "343": { + "upstream_number": 343, + "title": "Add extra maintainers?", + "state": "open", + "import_id": 16769994, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/23" + }, + "398": { + "upstream_number": 398, + "title": "Add opencode-timings plugin", + "state": "open", + "import_id": 16769995, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/24" + }, + "399": { + "upstream_number": 399, + "title": "Add n3rv \u2014 Engineering infrastructure for opencode agents", + "state": "closed", + "import_id": 16769996, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/25" + }, + "409": { + "upstream_number": 409, + "title": "Community project: OneTicket Core \u2013 turning GitHub into an agentic delivery pipeline powered by OpenCode", + "state": "open", + "import_id": 16769997, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/26" + }, + "430": { + "upstream_number": 430, + "title": "Add AIDevOps to plugins", + "state": "open", + "import_id": 16769998, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/27" + }, + "453": { + "upstream_number": 453, + "title": "Agents", + "state": "open", + "import_id": 16769999, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/28" + }, + "475": { + "upstream_number": 475, + "title": "Add Zara Agent OPC - Empathetic AI Engineering Partner", + "state": "open", + "import_id": 16770000, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/29" + }, + "484": { + "upstream_number": 484, + "title": "Add Skill Hub \u2014 Multi-Platform Skills Discovery", + "state": "open", + "import_id": 16770001, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/30" + }, + "502": { + "upstream_number": 502, + "title": "Add Data Olympus as governed project knowledge MCP server", + "state": "open", + "import_id": 16770002, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/31" + }, + "507": { + "upstream_number": 507, + "title": "Add OpenCode Agent Variants", + "state": "open", + "import_id": 16770003, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/32" + }, + "509": { + "upstream_number": 509, + "title": "Menu bar tool for visualizing token usage and estimated costs - Tokenscope", + "state": "open", + "import_id": 16770004, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/33" + }, + "517": { + "upstream_number": 517, + "title": "how to change plan or build?", + "state": "open", + "import_id": 16770005, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/34" + }, + "520": { + "upstream_number": 520, + "title": "UI regressions flow introduced in version 1.18.0", + "state": "open", + "import_id": 16770006, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/35" + }, + "607": { + "upstream_number": 607, + "title": "Submit IdeaHunter for the tools/resources list", + "state": "open", + "import_id": 16770007, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/36" + }, + "639": { + "upstream_number": 639, + "title": "Resource suggestion: TANCO SkillHub for reusable OpenCode/Agent Skills", + "state": "open", + "import_id": 16770008, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/37" + }, + "641": { + "upstream_number": 641, + "title": "Add auto-resume", + "state": "open", + "import_id": 16770009, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/38" + }, + "643": { + "upstream_number": 643, + "title": "Is this project still actively maintained?", + "state": "open", + "import_id": 16770010, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/39" + }, + "651": { + "upstream_number": 651, + "title": "Listing request: SandBase CLI project for OpenCode", + "state": "open", + "import_id": 16770011, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/40" + }, + "702": { + "upstream_number": 702, + "title": "Add AegisOS Enterprise AI Workforce OS", + "state": "open", + "import_id": 16770012, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/41" + }, + "714": { + "upstream_number": 714, + "title": "Show Opencode V1 and V2 support", + "state": "open", + "import_id": 16770013, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/42" + }, + "763": { + "upstream_number": 763, + "title": "Add DataCloak: secret/PII cloak plugin for OpenCode", + "state": "open", + "import_id": 16770014, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/43" + }, + "775": { + "upstream_number": 775, + "title": "Add opencode-seatbelt: macOS kernel sandbox plugin for OpenCode", + "state": "open", + "import_id": 16770015, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/44" + }, + "868": { + "upstream_number": 868, + "title": "Listing request: Telai, vertical tabs terminal for Opencode", + "state": "open", + "import_id": 16770016, + "issue_url": "https://api.github.com/repos/Heretek-AI/awesome-opencode/issues/45" + } +} \ No newline at end of file diff --git a/scripts/import/upstream_prs_map.json b/scripts/import/upstream_prs_map.json new file mode 100644 index 0000000..ac0044c --- /dev/null +++ b/scripts/import/upstream_prs_map.json @@ -0,0 +1,2774 @@ +{ + "130": { + "upstream_number": 130, + "new_pr_number": 46, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/46", + "title": "feat: add Opencode Auto Update plugin" + }, + "132": { + "upstream_number": 132, + "new_pr_number": 47, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/47", + "title": "feat: add vsync - config sync across AI coding tools" + }, + "133": { + "upstream_number": 133, + "new_pr_number": 48, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/48", + "title": "docs: add opencode-pollinations-plugin to plugins" + }, + "136": { + "upstream_number": 136, + "new_pr_number": 49, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/49", + "title": "Add Promption to Projects list" + }, + "137": { + "upstream_number": 137, + "new_pr_number": 50, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/50", + "title": "Add PPTX from Layouts plugin" + }, + "150": { + "upstream_number": 150, + "new_pr_number": 51, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/51", + "title": "docs: add opencode-morphllm to plugins" + }, + "152": { + "upstream_number": 152, + "new_pr_number": 52, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/52", + "title": "feat: add OhMyOpenCode website resource" + }, + "153": { + "upstream_number": 153, + "new_pr_number": 53, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/53", + "title": "docs: add cyberpunk to themes" + }, + "160": { + "upstream_number": 160, + "new_pr_number": 54, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/54", + "title": "docs: add OpenPrism to plugins" + }, + "161": { + "upstream_number": 161, + "new_pr_number": 55, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/55", + "title": "docs: add openkilo to plugins" + }, + "162": { + "upstream_number": 162, + "new_pr_number": 56, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/56", + "title": "Add Hum \u2014 AI author publishing agent" + }, + "167": { + "upstream_number": 167, + "new_pr_number": 57, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/57", + "title": "Add Oh My Kiro plugin" + }, + "170": { + "upstream_number": 170, + "new_pr_number": 58, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/58", + "title": "feat: add opencode-crawl4ai plugin" + }, + "172": { + "upstream_number": 172, + "new_pr_number": 59, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/59", + "title": "docs: add opencode-remote-agent to plugins" + }, + "173": { + "upstream_number": 173, + "new_pr_number": 60, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/60", + "title": "docs: add worktoolai to plugins" + }, + "182": { + "upstream_number": 182, + "new_pr_number": 61, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/61", + "title": "Add opencode memento plugin" + }, + "202": { + "upstream_number": 202, + "new_pr_number": 62, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/62", + "title": "feat: add AgentField, SWE-AF, and SEC-AF" + }, + "206": { + "upstream_number": 206, + "new_pr_number": 63, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/63", + "title": "Add marcodiniz/ag-local-bridge to Projects" + }, + "207": { + "upstream_number": 207, + "new_pr_number": 64, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/64", + "title": "Add Untether \u2014 Telegram bridge with OpenCode support" + }, + "218": { + "upstream_number": 218, + "new_pr_number": 65, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/65", + "title": "Add AgenTopology" + }, + "220": { + "upstream_number": 220, + "new_pr_number": 66, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/66", + "title": "docs: add session-coherence and claude-learn to projects" + }, + "224": { + "upstream_number": 224, + "new_pr_number": 67, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/67", + "title": "Add MonadicSharp-OpenCode \u2014 C#/.NET MCP server integration" + }, + "225": { + "upstream_number": 225, + "new_pr_number": 68, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/68", + "title": "Add Termly \u2014 free native mobile app for OpenCode" + }, + "226": { + "upstream_number": 226, + "new_pr_number": 69, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/69", + "title": "docs: add rehydra to plugins" + }, + "231": { + "upstream_number": 231, + "new_pr_number": 70, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/70", + "title": "feat: add opencode-llm-proxy plugin" + }, + "233": { + "upstream_number": 233, + "new_pr_number": 71, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/71", + "title": "Add AIRIS MCP Gateway" + }, + "239": { + "upstream_number": 239, + "new_pr_number": 72, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/72", + "title": "Add Parallel Code" + }, + "247": { + "upstream_number": 247, + "new_pr_number": 73, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/73", + "title": "docs: add opencode-preview to plugins" + }, + "248": { + "upstream_number": 248, + "new_pr_number": 74, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/74", + "title": "Add StringRay agent entry" + }, + "256": { + "upstream_number": 256, + "new_pr_number": 75, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/75", + "title": "docs: add opencode-telegram to projects" + }, + "259": { + "upstream_number": 259, + "new_pr_number": 76, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/76", + "title": "docs: add Global Chat to projects" + }, + "263": { + "upstream_number": 263, + "new_pr_number": 77, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/77", + "title": "Add ocp to Projects" + }, + "264": { + "upstream_number": 264, + "new_pr_number": 78, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/78", + "title": "Add opencode-copilot-budget plugin" + }, + "268": { + "upstream_number": 268, + "new_pr_number": 79, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/79", + "title": "docs: add Google Drive \u2013 Memyard to plugins" + }, + "271": { + "upstream_number": 271, + "new_pr_number": 80, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/80", + "title": "docs: add opencode-trace to plugins" + }, + "277": { + "upstream_number": 277, + "new_pr_number": 81, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/81", + "title": "feat: OpenCode Models Usage" + }, + "284": { + "upstream_number": 284, + "new_pr_number": 82, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/82", + "title": "docs: add opencode-session-recall to plugins" + }, + "285": { + "upstream_number": 285, + "new_pr_number": 83, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/83", + "title": "docs: add opencode-model-scout to plugins" + }, + "286": { + "upstream_number": 286, + "new_pr_number": 84, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/84", + "title": "feat: WSL Notifications plugin" + }, + "288": { + "upstream_number": 288, + "new_pr_number": 85, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/85", + "title": "plugins: add opencode-cost-guard: Warn or stop your OpenCode session \u2026" + }, + "289": { + "upstream_number": 289, + "new_pr_number": 86, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/86", + "title": "Add MorningAI to Plugins" + }, + "291": { + "upstream_number": 291, + "new_pr_number": 87, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/87", + "title": "docs: add contexty plugin to plugins" + }, + "302": { + "upstream_number": 302, + "new_pr_number": 88, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/88", + "title": "docs: add 8 new entries (opencode-easy-workflow, opencode-auto-resume, zosma-qa, anvevoice, opencode-remote-control, clarvia, dreampowers, super-local-memory)" + }, + "306": { + "upstream_number": 306, + "new_pr_number": 89, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/89", + "title": "Add Emdash Skills agent to AGENTS section" + }, + "308": { + "upstream_number": 308, + "new_pr_number": 90, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/90", + "title": "Add Skills\u5b9d (skilery.com) to Projects" + }, + "309": { + "upstream_number": 309, + "new_pr_number": 91, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/91", + "title": "docs: add opencode-byterover plugin" + }, + "312": { + "upstream_number": 312, + "new_pr_number": 92, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/92", + "title": "docs: add prompt-to-asset (projects) and unslop (plugins)" + }, + "314": { + "upstream_number": 314, + "new_pr_number": 93, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/93", + "title": "Add Hindsight Auto-Memory plugin" + }, + "316": { + "upstream_number": 316, + "new_pr_number": 94, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/94", + "title": "Add opencode-background-tasks plugin" + }, + "318": { + "upstream_number": 318, + "new_pr_number": 95, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/95", + "title": "docs: add SuperBased to plugins" + }, + "325": { + "upstream_number": 325, + "new_pr_number": 96, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/96", + "title": "Add SKILLS section with 4 OpenCode skills" + }, + "326": { + "upstream_number": 326, + "new_pr_number": 97, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/97", + "title": "Add lean-ctx" + }, + "335": { + "upstream_number": 335, + "new_pr_number": 98, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/98", + "title": "Plugins: add terminal-bell-macos.yaml" + }, + "355": { + "upstream_number": 355, + "new_pr_number": 99, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/99", + "title": "Add APort Agent Guardrails" + }, + "366": { + "upstream_number": 366, + "new_pr_number": 100, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/100", + "title": "Add Ano - collaborative shell with Claude Code and MCP" + }, + "369": { + "upstream_number": 369, + "new_pr_number": 101, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/101", + "title": "Add multilingual README support (Chinese & Russian)" + }, + "373": { + "upstream_number": 373, + "new_pr_number": 102, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/102", + "title": "Add OpenToken \u2014 token-saving plugin with 42 compression layers" + }, + "375": { + "upstream_number": 375, + "new_pr_number": 103, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/103", + "title": "docs: add Superpowers plugin" + }, + "376": { + "upstream_number": 376, + "new_pr_number": 104, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/104", + "title": "docs: add discord-presence to plugins" + }, + "377": { + "upstream_number": 377, + "new_pr_number": 105, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/105", + "title": "Add Mem0 OpenCode Plugin to plugins" + }, + "378": { + "upstream_number": 378, + "new_pr_number": 106, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/106", + "title": "Add Ivy Tendril to Projects" + }, + "381": { + "upstream_number": 381, + "new_pr_number": 107, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/107", + "title": "Add Agent Sessions" + }, + "383": { + "upstream_number": 383, + "new_pr_number": 108, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/108", + "title": "docs: add Snitch plugin" + }, + "387": { + "upstream_number": 387, + "new_pr_number": 109, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/109", + "title": "docs: add iamhumans \u2014 human-shaped conversation skill for opencode, 99/100 eval" + }, + "388": { + "upstream_number": 388, + "new_pr_number": 110, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/110", + "title": "Add opencode-crawl4ai plugin" + }, + "393": { + "upstream_number": 393, + "new_pr_number": 111, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/111", + "title": "Add El Primor \u2014 agente de excelencia para OpenCode" + }, + "394": { + "upstream_number": 394, + "new_pr_number": 112, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/112", + "title": "Add Reflection-3 \u2014 judge layer that catches premature agent stops" + }, + "395": { + "upstream_number": 395, + "new_pr_number": 113, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/113", + "title": "feat: add supereasy-memory plugin" + }, + "397": { + "upstream_number": 397, + "new_pr_number": 114, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/114", + "title": "docs: add Ory for OpenCode to plugins" + }, + "404": { + "upstream_number": 404, + "new_pr_number": 115, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/115", + "title": "docs: add opencode-trace to plugins" + }, + "419": { + "upstream_number": 419, + "new_pr_number": 116, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/116", + "title": "Add MiMo-Code (voice-driven multimodal desktop coding agent for MiMo)" + }, + "421": { + "upstream_number": 421, + "new_pr_number": 117, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/117", + "title": "docs: add opencode-mimo-free-plugin to plugins" + }, + "422": { + "upstream_number": 422, + "new_pr_number": 118, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/118", + "title": "Add handoff \u2014 cross-agent task dispatcher for Claude Code / Codex" + }, + "423": { + "upstream_number": 423, + "new_pr_number": 119, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/119", + "title": "Add Generative Media Skills \u2014 13 OpenCode-native skills for image/video/audio generation" + }, + "424": { + "upstream_number": 424, + "new_pr_number": 120, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/120", + "title": "docs: add opencode-skill-stats, opencode-hermes, opencode-auto-ocr-image" + }, + "425": { + "upstream_number": 425, + "new_pr_number": 121, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/121", + "title": "docs: add OpenCode rotator projects" + }, + "427": { + "upstream_number": 427, + "new_pr_number": 122, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/122", + "title": "docs: add CLAUDE.md for opencode to plugins" + }, + "428": { + "upstream_number": 428, + "new_pr_number": 123, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/123", + "title": "docs: add opencode-token-counter to plugins" + }, + "429": { + "upstream_number": 429, + "new_pr_number": 124, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/124", + "title": "docs: add opencode-sessions-explorer to plugins" + }, + "431": { + "upstream_number": 431, + "new_pr_number": 125, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/125", + "title": "docs: add AIDevOps to plugins" + }, + "432": { + "upstream_number": 432, + "new_pr_number": 126, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/126", + "title": "docs: add @jimicze-opencode/opencode-tps to plugins" + }, + "436": { + "upstream_number": 436, + "new_pr_number": 127, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/127", + "title": "feat(plugins): add Antigravity CLI Auth plugin" + }, + "438": { + "upstream_number": 438, + "new_pr_number": 128, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/128", + "title": "docs: add opencode-lens plugin" + }, + "439": { + "upstream_number": 439, + "new_pr_number": 129, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/129", + "title": "Add AccInt plugin" + }, + "441": { + "upstream_number": 441, + "new_pr_number": 130, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/130", + "title": "Add Coverage Guard, Flaky Test Detector and Task Decomposer" + }, + "442": { + "upstream_number": 442, + "new_pr_number": 131, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/131", + "title": "Add AION \u2014 time-series harness plugin" + }, + "443": { + "upstream_number": 443, + "new_pr_number": 132, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/132", + "title": "docs: add Argus framework to projects" + }, + "444": { + "upstream_number": 444, + "new_pr_number": 133, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/133", + "title": "docs: add ocp to projects" + }, + "445": { + "upstream_number": 445, + "new_pr_number": 134, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/134", + "title": "docs: add setup-chat-workflows plugin" + }, + "447": { + "upstream_number": 447, + "new_pr_number": 135, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/135", + "title": "docs: add opencode-smartsnip to plugins" + }, + "449": { + "upstream_number": 449, + "new_pr_number": 136, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/136", + "title": "docs: add amore to plugins" + }, + "450": { + "upstream_number": 450, + "new_pr_number": 137, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/137", + "title": "docs: add opencode-fusion to plugins" + }, + "451": { + "upstream_number": 451, + "new_pr_number": 138, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/138", + "title": "docs: add basemind to plugins" + }, + "452": { + "upstream_number": 452, + "new_pr_number": 139, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/139", + "title": "Add OpenChamber Mobile Bridge" + }, + "454": { + "upstream_number": 454, + "new_pr_number": 140, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/140", + "title": "docs: add opencode-helper to projects" + }, + "455": { + "upstream_number": 455, + "new_pr_number": 141, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/141", + "title": "Add ax project" + }, + "456": { + "upstream_number": 456, + "new_pr_number": 142, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/142", + "title": "docs: add LoopTroop to projects" + }, + "458": { + "upstream_number": 458, + "new_pr_number": 143, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/143", + "title": "docs: add neuralyzer to plugins" + }, + "459": { + "upstream_number": 459, + "new_pr_number": 144, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/144", + "title": "feat: add EGC - persistent memory MCP server" + }, + "461": { + "upstream_number": 461, + "new_pr_number": 145, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/145", + "title": "Add opencode-rtl to Plugins list" + }, + "462": { + "upstream_number": 462, + "new_pr_number": 146, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/146", + "title": "add @openstellar/mcp-adapter and @openstellar/tool-search plugins" + }, + "463": { + "upstream_number": 463, + "new_pr_number": 147, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/147", + "title": "docs: add opencode-openai-compact to plugins" + }, + "464": { + "upstream_number": 464, + "new_pr_number": 148, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/148", + "title": "docs: add agent-historian to projects" + }, + "465": { + "upstream_number": 465, + "new_pr_number": 149, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/149", + "title": "docs: add aware-code to agents" + }, + "466": { + "upstream_number": 466, + "new_pr_number": 150, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/150", + "title": "docs: add opencode-sidebar-usage to plugins" + }, + "468": { + "upstream_number": 468, + "new_pr_number": 151, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/151", + "title": "docs: add opencode-git-trailers plugin" + }, + "469": { + "upstream_number": 469, + "new_pr_number": 152, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/152", + "title": "docs: add opencode-thinking-fix to plugins" + }, + "472": { + "upstream_number": 472, + "new_pr_number": 153, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/153", + "title": "docs: Add opencode-kasper plugin" + }, + "473": { + "upstream_number": 473, + "new_pr_number": 154, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/154", + "title": "Create echoes-vault" + }, + "474": { + "upstream_number": 474, + "new_pr_number": 155, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/155", + "title": "docs: add PatchWarden project" + }, + "476": { + "upstream_number": 476, + "new_pr_number": 156, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/156", + "title": "docs: add specralph to projects" + }, + "477": { + "upstream_number": 477, + "new_pr_number": 157, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/157", + "title": "docs(plugins): add Lens, Image Preview, and Voice plugins for OpenCode Web" + }, + "478": { + "upstream_number": 478, + "new_pr_number": 158, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/158", + "title": "Add OpenCode Agent Orchestration Kit" + }, + "480": { + "upstream_number": 480, + "new_pr_number": 159, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/159", + "title": "Add eval-harness to PROJECTS section" + }, + "481": { + "upstream_number": 481, + "new_pr_number": 160, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/160", + "title": "Add Claudescope to projects" + }, + "483": { + "upstream_number": 483, + "new_pr_number": 161, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/161", + "title": "docs: add AI Agent Automations resource" + }, + "486": { + "upstream_number": 486, + "new_pr_number": 162, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/162", + "title": "Add Roborev and djimitflo to Projects" + }, + "487": { + "upstream_number": 487, + "new_pr_number": 163, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/163", + "title": "docs: add AionUi to projects" + }, + "488": { + "upstream_number": 488, + "new_pr_number": 164, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/164", + "title": "Add juhe-skills to resources" + }, + "489": { + "upstream_number": 489, + "new_pr_number": 165, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/165", + "title": "docs: add SpriteCook MCP to plugins" + }, + "490": { + "upstream_number": 490, + "new_pr_number": 166, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/166", + "title": "Add OpenCode Alchemyst Context plugin configuration" + }, + "491": { + "upstream_number": 491, + "new_pr_number": 167, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/167", + "title": "Add semantic search mcp" + }, + "492": { + "upstream_number": 492, + "new_pr_number": 168, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/168", + "title": "docs: add OpenCode Model Scorecard" + }, + "493": { + "upstream_number": 493, + "new_pr_number": 169, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/169", + "title": "Add LM Studio Warm plugin" + }, + "494": { + "upstream_number": 494, + "new_pr_number": 170, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/170", + "title": "docs: add DataEcho skills to resources" + }, + "497": { + "upstream_number": 497, + "new_pr_number": 171, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/171", + "title": "feat: add opencode-lazy-load plugin" + }, + "498": { + "upstream_number": 498, + "new_pr_number": 172, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/172", + "title": "docs: add Cosmosmith resource" + }, + "499": { + "upstream_number": 499, + "new_pr_number": 173, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/173", + "title": "docs: add OpenCode Primer to resources" + }, + "500": { + "upstream_number": 500, + "new_pr_number": 174, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/174", + "title": "docs: add opencode-failover to plugins" + }, + "501": { + "upstream_number": 501, + "new_pr_number": 175, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/175", + "title": "docs: add Tree Ring Memory" + }, + "503": { + "upstream_number": 503, + "new_pr_number": 176, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/176", + "title": "Add Adversarial Goal plugin" + }, + "504": { + "upstream_number": 504, + "new_pr_number": 177, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/177", + "title": "Add AgentBox to projects" + }, + "505": { + "upstream_number": 505, + "new_pr_number": 178, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/178", + "title": "Add Unforgit plugin" + }, + "506": { + "upstream_number": 506, + "new_pr_number": 179, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/179", + "title": "Add Internet Court" + }, + "508": { + "upstream_number": 508, + "new_pr_number": 180, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/180", + "title": "docs: add DevIntern to projects" + }, + "510": { + "upstream_number": 510, + "new_pr_number": 181, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/181", + "title": "Add SuperSpec to resources" + }, + "514": { + "upstream_number": 514, + "new_pr_number": 182, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/182", + "title": "docs: add ditto to plugins" + }, + "515": { + "upstream_number": 515, + "new_pr_number": 183, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/183", + "title": "docs: add PickySteve project" + }, + "516": { + "upstream_number": 516, + "new_pr_number": 184, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/184", + "title": "docs: add Agent Teams project" + }, + "518": { + "upstream_number": 518, + "new_pr_number": 185, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/185", + "title": "docs: add opencode-zellij-indicator to plugins" + }, + "519": { + "upstream_number": 519, + "new_pr_number": 186, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/186", + "title": "opencode-fractal-memory" + }, + "521": { + "upstream_number": 521, + "new_pr_number": 187, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/187", + "title": "Add Sema plugin (LSP + MCP + theme for Sema Lisp)" + }, + "522": { + "upstream_number": 522, + "new_pr_number": 188, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/188", + "title": "docs: add my-opencode-deepseek-config to resources" + }, + "523": { + "upstream_number": 523, + "new_pr_number": 189, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/189", + "title": "docs: add opencode-todo-progress to plugins" + }, + "524": { + "upstream_number": 524, + "new_pr_number": 190, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/190", + "title": "docs: add opencode-usage-bar to plugins" + }, + "525": { + "upstream_number": 525, + "new_pr_number": 191, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/191", + "title": "docs: add oc-monitor to plugins" + }, + "526": { + "upstream_number": 526, + "new_pr_number": 192, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/192", + "title": "docs: add find-mcp to resources" + }, + "527": { + "upstream_number": 527, + "new_pr_number": 193, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/193", + "title": "docs: add opencode-session-id-plugin to plugins" + }, + "528": { + "upstream_number": 528, + "new_pr_number": 194, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/194", + "title": "docs: add superpowers-controller to plugins" + }, + "530": { + "upstream_number": 530, + "new_pr_number": 195, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/195", + "title": "docs: add opencode-parley (MIT Parley provider) to plugins" + }, + "532": { + "upstream_number": 532, + "new_pr_number": 196, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/196", + "title": "docs: add littlepowers to plugins" + }, + "533": { + "upstream_number": 533, + "new_pr_number": 197, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/197", + "title": "docs: add opencode-pollinations-plugin to plugins" + }, + "534": { + "upstream_number": 534, + "new_pr_number": 198, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/198", + "title": "docs: add opencode-session-tracker to plugins" + }, + "536": { + "upstream_number": 536, + "new_pr_number": 199, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/199", + "title": "Create opencode-rmux.yaml" + }, + "537": { + "upstream_number": 537, + "new_pr_number": 200, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/200", + "title": "docs: add Wuniq to projects" + }, + "538": { + "upstream_number": 538, + "new_pr_number": 201, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/201", + "title": "docs: add Orkas to projects" + }, + "539": { + "upstream_number": 539, + "new_pr_number": 202, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/202", + "title": "Add Claudexor to projects" + }, + "540": { + "upstream_number": 540, + "new_pr_number": 203, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/203", + "title": "docs: add episodic-memory to plugins" + }, + "542": { + "upstream_number": 542, + "new_pr_number": 204, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/204", + "title": "docs: add fractal project" + }, + "543": { + "upstream_number": 543, + "new_pr_number": 205, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/205", + "title": "Add opencode-profiles to Agents section" + }, + "545": { + "upstream_number": 545, + "new_pr_number": 206, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/206", + "title": "Add AgentCode - Multi-model coding agent skill" + }, + "546": { + "upstream_number": 546, + "new_pr_number": 207, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/207", + "title": "docs: add Cursor Provider to plugins" + }, + "547": { + "upstream_number": 547, + "new_pr_number": 208, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/208", + "title": "docs: add opencode-cliproxyapi plugin" + }, + "549": { + "upstream_number": 549, + "new_pr_number": 209, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/209", + "title": "docs: add opencode-plugin-loop to plugins" + }, + "550": { + "upstream_number": 550, + "new_pr_number": 210, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/210", + "title": "docs: add opencode-caffeinate-win32 to plugins" + }, + "551": { + "upstream_number": 551, + "new_pr_number": 211, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/211", + "title": "docs: add cc-oc and omoctl to projects" + }, + "552": { + "upstream_number": 552, + "new_pr_number": 212, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/212", + "title": "docs: add modellix to plugins" + }, + "553": { + "upstream_number": 553, + "new_pr_number": 213, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/213", + "title": "docs: add openwts to projects" + }, + "554": { + "upstream_number": 554, + "new_pr_number": 214, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/214", + "title": "Add boffin architectural guardrails for AI coding agents into OpenCode" + }, + "556": { + "upstream_number": 556, + "new_pr_number": 215, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/215", + "title": "Add cowork-to-code-bridge to projects" + }, + "557": { + "upstream_number": 557, + "new_pr_number": 216, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/216", + "title": "docs: add agent-loop to plugins" + }, + "558": { + "upstream_number": 558, + "new_pr_number": 217, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/217", + "title": "docs: add PPT Design Skill - AI-powered PPT generation" + }, + "559": { + "upstream_number": 559, + "new_pr_number": 218, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/218", + "title": "Add GoodMemory to projects" + }, + "560": { + "upstream_number": 560, + "new_pr_number": 219, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/219", + "title": "docs: add opencode-council plugin" + }, + "561": { + "upstream_number": 561, + "new_pr_number": 220, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/220", + "title": "docs: add opencode-vision to plugins" + }, + "562": { + "upstream_number": 562, + "new_pr_number": 221, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/221", + "title": "docs: add solo-memory plugin to plugins" + }, + "563": { + "upstream_number": 563, + "new_pr_number": 222, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/222", + "title": "docs: add opencode-tabs to plugins" + }, + "564": { + "upstream_number": 564, + "new_pr_number": 223, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/223", + "title": "docs: add sortie-dogs to plugins" + }, + "565": { + "upstream_number": 565, + "new_pr_number": 224, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/224", + "title": "Add OpenCode Focus plugin" + }, + "566": { + "upstream_number": 566, + "new_pr_number": 225, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/225", + "title": "docs: add opencode-subagent-model-selector to plugins" + }, + "567": { + "upstream_number": 567, + "new_pr_number": 226, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/226", + "title": "docs: add OpenClient project" + }, + "568": { + "upstream_number": 568, + "new_pr_number": 227, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/227", + "title": "docs: add opencode-plugin-statusbar to plugins" + }, + "569": { + "upstream_number": 569, + "new_pr_number": 228, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/228", + "title": "docs: add opencode-plugin-cost-guard to plugins" + }, + "570": { + "upstream_number": 570, + "new_pr_number": 229, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/229", + "title": "docs: add opencode-tasksmd to plugins" + }, + "571": { + "upstream_number": 571, + "new_pr_number": 230, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/230", + "title": "docs: add OutageDeck MCP resource" + }, + "572": { + "upstream_number": 572, + "new_pr_number": 231, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/231", + "title": "docs: add qwen-audio-agent to projects" + }, + "573": { + "upstream_number": 573, + "new_pr_number": 232, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/232", + "title": "docs: update oh-my-opencode -> oh-my-openagent (renamed)" + }, + "575": { + "upstream_number": 575, + "new_pr_number": 233, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/233", + "title": "docs: add cache-stats to plugins" + }, + "576": { + "upstream_number": 576, + "new_pr_number": 234, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/234", + "title": "Add context-workflow to Plugins" + }, + "577": { + "upstream_number": 577, + "new_pr_number": 235, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/235", + "title": "Add run-long-script to Plugins" + }, + "578": { + "upstream_number": 578, + "new_pr_number": 236, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/236", + "title": "docs: add opencode-browser-cdp to plugins" + }, + "579": { + "upstream_number": 579, + "new_pr_number": 237, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/237", + "title": "docs: add Shell Tasks plugin" + }, + "580": { + "upstream_number": 580, + "new_pr_number": 238, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/238", + "title": "docs: add intentic to projects" + }, + "581": { + "upstream_number": 581, + "new_pr_number": 239, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/239", + "title": "docs: add opencode-autonomy and opencode-ambient to plugins" + }, + "582": { + "upstream_number": 582, + "new_pr_number": 240, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/240", + "title": "docs: add opencode-fusion to agents" + }, + "583": { + "upstream_number": 583, + "new_pr_number": 241, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/241", + "title": "docs: add opencode-eye to plugins" + }, + "584": { + "upstream_number": 584, + "new_pr_number": 242, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/242", + "title": "docs: add staffetta to projects" + }, + "586": { + "upstream_number": 586, + "new_pr_number": 243, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/243", + "title": "docs: add opencode-taskmarket to plugins" + }, + "587": { + "upstream_number": 587, + "new_pr_number": 244, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/244", + "title": "docs: add review-pro to agents" + }, + "588": { + "upstream_number": 588, + "new_pr_number": 245, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/245", + "title": "docs: add opencode-plugin-peers to plugins" + }, + "589": { + "upstream_number": 589, + "new_pr_number": 246, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/246", + "title": "docs: add Hexis to projects" + }, + "590": { + "upstream_number": 590, + "new_pr_number": 247, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/247", + "title": "docs: add db-semantic-mcp to projects" + }, + "591": { + "upstream_number": 591, + "new_pr_number": 248, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/248", + "title": "docs: add oya to plugins" + }, + "592": { + "upstream_number": 592, + "new_pr_number": 249, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/249", + "title": "docs: add Beads Sidebar to plugins" + }, + "593": { + "upstream_number": 593, + "new_pr_number": 250, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/250", + "title": "docs: add opencode-db-clean to projects" + }, + "594": { + "upstream_number": 594, + "new_pr_number": 251, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/251", + "title": "docs: add opencode-obvious-grid to plugins" + }, + "595": { + "upstream_number": 595, + "new_pr_number": 252, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/252", + "title": "docs: add Meanwhile to resources" + }, + "596": { + "upstream_number": 596, + "new_pr_number": 253, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/253", + "title": "docs: add Lians to OpenCode projects" + }, + "597": { + "upstream_number": 597, + "new_pr_number": 254, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/254", + "title": "Add OpenCode Agent Harness to projects" + }, + "598": { + "upstream_number": 598, + "new_pr_number": 255, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/255", + "title": "docs: add opencode-clarify to plugins" + }, + "599": { + "upstream_number": 599, + "new_pr_number": 256, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/256", + "title": "docs: add ai-project-tracker to plugins" + }, + "600": { + "upstream_number": 600, + "new_pr_number": 257, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/257", + "title": "docs: add trustless to projects" + }, + "601": { + "upstream_number": 601, + "new_pr_number": 258, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/258", + "title": "docs: add context-optimizer to plugins" + }, + "603": { + "upstream_number": 603, + "new_pr_number": 259, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/259", + "title": "docs: add OpenCodeMirror plugin" + }, + "604": { + "upstream_number": 604, + "new_pr_number": 260, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/260", + "title": "docs: add LWC project memory resource" + }, + "605": { + "upstream_number": 605, + "new_pr_number": 261, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/261", + "title": "docs: add caspian-opencode-plugin to plugins" + }, + "606": { + "upstream_number": 606, + "new_pr_number": 262, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/262", + "title": "docs: add Agent QA to projects" + }, + "608": { + "upstream_number": 608, + "new_pr_number": 263, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/263", + "title": "docs: add wpm to plugins" + }, + "609": { + "upstream_number": 609, + "new_pr_number": 264, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/264", + "title": "docs: add UIZZE project" + }, + "610": { + "upstream_number": 610, + "new_pr_number": 265, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/265", + "title": "docs: add clawmetry to projects" + }, + "611": { + "upstream_number": 611, + "new_pr_number": 266, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/266", + "title": "docs: add forgeo to projects" + }, + "612": { + "upstream_number": 612, + "new_pr_number": 267, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/267", + "title": "docs: add Oh My Cassette to plugins" + }, + "613": { + "upstream_number": 613, + "new_pr_number": 268, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/268", + "title": "Add opencode-prompt-suggester to plugins" + }, + "614": { + "upstream_number": 614, + "new_pr_number": 269, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/269", + "title": "docs: add opencode-cursor to plugins" + }, + "615": { + "upstream_number": 615, + "new_pr_number": 270, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/270", + "title": "Add rolecraft to projects" + }, + "616": { + "upstream_number": 616, + "new_pr_number": 271, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/271", + "title": "docs: add opencode-roundtable to agents" + }, + "617": { + "upstream_number": 617, + "new_pr_number": 272, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/272", + "title": "Add WaveSpeed Skill (AI media generation)" + }, + "618": { + "upstream_number": 618, + "new_pr_number": 273, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/273", + "title": "docs: add opencode-autorecord to plugins" + }, + "619": { + "upstream_number": 619, + "new_pr_number": 274, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/274", + "title": "docs: add MARGINAL to plugins" + }, + "620": { + "upstream_number": 620, + "new_pr_number": 275, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/275", + "title": "docs: add aerovato-operator-memory to plugins" + }, + "621": { + "upstream_number": 621, + "new_pr_number": 276, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/276", + "title": "docs: add repo-cover to resources" + }, + "622": { + "upstream_number": 622, + "new_pr_number": 277, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/277", + "title": "docs: add opencode-async-prompt-injector to plugins" + }, + "624": { + "upstream_number": 624, + "new_pr_number": 278, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/278", + "title": "Add opencode-copy-picker" + }, + "625": { + "upstream_number": 625, + "new_pr_number": 279, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/279", + "title": "docs: add aGiTrack to projects" + }, + "628": { + "upstream_number": 628, + "new_pr_number": 280, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/280", + "title": "docs: add opencode-session-cost to plugins" + }, + "630": { + "upstream_number": 630, + "new_pr_number": 281, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/281", + "title": "docs: add ShipFrame to agents" + }, + "631": { + "upstream_number": 631, + "new_pr_number": 282, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/282", + "title": "Add Chat Sidebar for OpenCode (VS Code extension) to Projects" + }, + "632": { + "upstream_number": 632, + "new_pr_number": 283, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/283", + "title": "docs: add background-process and show-image plugins, replace archived opencode-background" + }, + "634": { + "upstream_number": 634, + "new_pr_number": 284, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/284", + "title": "docs: add opencode-qoder-bridge to plugins" + }, + "635": { + "upstream_number": 635, + "new_pr_number": 285, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/285", + "title": "Add dsh-movein to projects" + }, + "636": { + "upstream_number": 636, + "new_pr_number": 286, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/286", + "title": "docs: add deja to plugins" + }, + "637": { + "upstream_number": 637, + "new_pr_number": 287, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/287", + "title": "add dejavu \u2014 cross-session error-gate plugin" + }, + "640": { + "upstream_number": 640, + "new_pr_number": 288, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/288", + "title": "docs: add opencode2-shell-tasks to plugins" + }, + "642": { + "upstream_number": 642, + "new_pr_number": 289, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/289", + "title": "docs: add opencode-prewalk to plugins" + }, + "645": { + "upstream_number": 645, + "new_pr_number": 290, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/290", + "title": "docs: add Stacktree to projects" + }, + "647": { + "upstream_number": 647, + "new_pr_number": 291, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/291", + "title": "docs: add chronotile to projects" + }, + "648": { + "upstream_number": 648, + "new_pr_number": 292, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/292", + "title": "docs: add OpenCode CN Deployment Guide to resources" + }, + "649": { + "upstream_number": 649, + "new_pr_number": 293, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/293", + "title": "docs: add opencode-caelestia-notify to plugins" + }, + "650": { + "upstream_number": 650, + "new_pr_number": 294, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/294", + "title": "docs: add Azdaja to projects" + }, + "652": { + "upstream_number": 652, + "new_pr_number": 295, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/295", + "title": "docs: add topic-compaction to plugins" + }, + "653": { + "upstream_number": 653, + "new_pr_number": 296, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/296", + "title": "Add godmode" + }, + "654": { + "upstream_number": 654, + "new_pr_number": 297, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/297", + "title": "docs: add hivemind to projects" + }, + "655": { + "upstream_number": 655, + "new_pr_number": 298, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/298", + "title": "docs: add Godmode to plugins" + }, + "656": { + "upstream_number": 656, + "new_pr_number": 299, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/299", + "title": "Add opencode autopilot logbook" + }, + "658": { + "upstream_number": 658, + "new_pr_number": 300, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/300", + "title": "docs: add openkrak MCP server to projects" + }, + "659": { + "upstream_number": 659, + "new_pr_number": 301, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/301", + "title": "Add DashScope Imagegen plugin" + }, + "660": { + "upstream_number": 660, + "new_pr_number": 302, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/302", + "title": "Add Image Reader Relay plugin" + }, + "662": { + "upstream_number": 662, + "new_pr_number": 303, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/303", + "title": "docs: add Claude Skills Pro to resources" + }, + "663": { + "upstream_number": 663, + "new_pr_number": 304, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/304", + "title": "docs: add esuyo-opencode-custom-provider to plugins" + }, + "664": { + "upstream_number": 664, + "new_pr_number": 305, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/305", + "title": "docs: add Veris for Daytona, Veris for E2B, and Veris Sim to plugins" + }, + "665": { + "upstream_number": 665, + "new_pr_number": 306, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/306", + "title": "docs: add opencode-model-alias to plugins" + }, + "666": { + "upstream_number": 666, + "new_pr_number": 307, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/307", + "title": "docs: add scionwood to plugins" + }, + "668": { + "upstream_number": 668, + "new_pr_number": 308, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/308", + "title": "Add heyGRC to plugins" + }, + "669": { + "upstream_number": 669, + "new_pr_number": 309, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/309", + "title": "feat: add gentleman-agent-gh skills (R2-2 batch)" + }, + "670": { + "upstream_number": 670, + "new_pr_number": 310, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/310", + "title": "docs: add OrcaReplay to projects" + }, + "671": { + "upstream_number": 671, + "new_pr_number": 311, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/311", + "title": "docs: add opencode-craft to plugins" + }, + "672": { + "upstream_number": 672, + "new_pr_number": 312, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/312", + "title": "docs: add opencode-startup-commands to plugins" + }, + "673": { + "upstream_number": 673, + "new_pr_number": 313, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/313", + "title": "docs: add opencode-vise to plugins" + }, + "674": { + "upstream_number": 674, + "new_pr_number": 314, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/314", + "title": "docs: add four opencode TUI plugins to plugins" + }, + "675": { + "upstream_number": 675, + "new_pr_number": 315, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/315", + "title": "docs: add opencode-cmd-provider to plugins" + }, + "676": { + "upstream_number": 676, + "new_pr_number": 316, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/316", + "title": "docs: add oh-my-agentmemory to plugins" + }, + "677": { + "upstream_number": 677, + "new_pr_number": 317, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/317", + "title": "add rlm-opencode plugin" + }, + "678": { + "upstream_number": 678, + "new_pr_number": 318, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/318", + "title": "docs: add opencode-sudo-popup to plugins" + }, + "679": { + "upstream_number": 679, + "new_pr_number": 319, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/319", + "title": "docs: add opencode-usage to plugins" + }, + "680": { + "upstream_number": 680, + "new_pr_number": 320, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/320", + "title": "Add llm-panel" + }, + "681": { + "upstream_number": 681, + "new_pr_number": 321, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/321", + "title": "docs: add Bifrost to awesome-opencode projects" + }, + "682": { + "upstream_number": 682, + "new_pr_number": 322, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/322", + "title": "docs: add Heym to projects" + }, + "683": { + "upstream_number": 683, + "new_pr_number": 323, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/323", + "title": "docs: add cortex to projects" + }, + "684": { + "upstream_number": 684, + "new_pr_number": 324, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/324", + "title": "docs: add opencode-ultra-setup to resources" + }, + "685": { + "upstream_number": 685, + "new_pr_number": 325, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/325", + "title": "docs: add showagent to projects" + }, + "686": { + "upstream_number": 686, + "new_pr_number": 326, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/326", + "title": "docs: add opencode-weknora to plugins" + }, + "687": { + "upstream_number": 687, + "new_pr_number": 327, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/327", + "title": "docs: add Infiknit local MCP plugin" + }, + "688": { + "upstream_number": 688, + "new_pr_number": 328, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/328", + "title": "docs: add TelegramCode to projects" + }, + "689": { + "upstream_number": 689, + "new_pr_number": 329, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/329", + "title": "docs: add opencode-dashboard to projects" + }, + "690": { + "upstream_number": 690, + "new_pr_number": 330, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/330", + "title": "Add oc-go-usage-display plugin" + }, + "691": { + "upstream_number": 691, + "new_pr_number": 331, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/331", + "title": "docs: add opencode-fold-tools to plugins" + }, + "692": { + "upstream_number": 692, + "new_pr_number": 332, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/332", + "title": "docs: add AllaiGate Model Router to plugins" + }, + "693": { + "upstream_number": 693, + "new_pr_number": 333, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/333", + "title": "docs: add token-norm to plugins" + }, + "694": { + "upstream_number": 694, + "new_pr_number": 334, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/334", + "title": "docs: add codemem to plugins" + }, + "695": { + "upstream_number": 695, + "new_pr_number": 335, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/335", + "title": "docs: add ContextStream MCP to plugins" + }, + "696": { + "upstream_number": 696, + "new_pr_number": 336, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/336", + "title": "docs: add Universal Agent Plugins" + }, + "697": { + "upstream_number": 697, + "new_pr_number": 337, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/337", + "title": "docs: add Goblin OpenCode projects" + }, + "699": { + "upstream_number": 699, + "new_pr_number": 338, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/338", + "title": "docs: add cognitive-lead-hq to projects" + }, + "700": { + "upstream_number": 700, + "new_pr_number": 339, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/339", + "title": "docs: add opencode-cd to plugins" + }, + "701": { + "upstream_number": 701, + "new_pr_number": 340, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/340", + "title": "Add opencode-memd plugin" + }, + "703": { + "upstream_number": 703, + "new_pr_number": 341, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/341", + "title": "docs: add Infer client examples to resources" + }, + "705": { + "upstream_number": 705, + "new_pr_number": 342, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/342", + "title": "docs: add opencode-kevin to plugins" + }, + "706": { + "upstream_number": 706, + "new_pr_number": 343, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/343", + "title": "docs: add myc to projects" + }, + "707": { + "upstream_number": 707, + "new_pr_number": 344, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/344", + "title": "docs: add opencode-shield-bash to plugins" + }, + "708": { + "upstream_number": 708, + "new_pr_number": 345, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/345", + "title": "docs: add squirrelscan to projects" + }, + "709": { + "upstream_number": 709, + "new_pr_number": 346, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/346", + "title": "Add dsh-skills-anywhere" + }, + "710": { + "upstream_number": 710, + "new_pr_number": 347, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/347", + "title": "docs: add shunt-digest to plugins" + }, + "711": { + "upstream_number": 711, + "new_pr_number": 348, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/348", + "title": "docs: add axi-memory to projects" + }, + "712": { + "upstream_number": 712, + "new_pr_number": 349, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/349", + "title": "docs: add Total Session Cost Tracker to plugins" + }, + "713": { + "upstream_number": 713, + "new_pr_number": 350, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/350", + "title": "Add Professor" + }, + "715": { + "upstream_number": 715, + "new_pr_number": 351, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/351", + "title": "docs: add opencode-idea-inbox" + }, + "716": { + "upstream_number": 716, + "new_pr_number": 352, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/352", + "title": "docs: add calyx to projects" + }, + "717": { + "upstream_number": 717, + "new_pr_number": 353, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/353", + "title": "Add opencode-agent-factory-plugin" + }, + "719": { + "upstream_number": 719, + "new_pr_number": 354, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/354", + "title": "docs: add mimocode-theme to themes" + }, + "720": { + "upstream_number": 720, + "new_pr_number": 355, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/355", + "title": "Add HostDeFi token-safety scanner" + }, + "721": { + "upstream_number": 721, + "new_pr_number": 356, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/356", + "title": "feat: add OpenCOOP - real-time team collaboration plugin" + }, + "722": { + "upstream_number": 722, + "new_pr_number": 357, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/357", + "title": "Add oos: find any session across all projects and resume instantly" + }, + "723": { + "upstream_number": 723, + "new_pr_number": 358, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/358", + "title": "docs: add omo-vision to plugins" + }, + "724": { + "upstream_number": 724, + "new_pr_number": 359, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/359", + "title": "docs: add opencode-status-popup to plugins" + }, + "725": { + "upstream_number": 725, + "new_pr_number": 360, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/360", + "title": "docs: add circadian to plugins" + }, + "726": { + "upstream_number": 726, + "new_pr_number": 361, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/361", + "title": "docs: add opencode-multi-usage to plugins" + }, + "727": { + "upstream_number": 727, + "new_pr_number": 362, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/362", + "title": "docs: add muse-auth to plugins" + }, + "728": { + "upstream_number": 728, + "new_pr_number": 363, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/363", + "title": "Add opencode-chrome-annotation" + }, + "729": { + "upstream_number": 729, + "new_pr_number": 364, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/364", + "title": "docs: add opencode-mlflow-plugin to plugins" + }, + "730": { + "upstream_number": 730, + "new_pr_number": 365, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/365", + "title": "docs: add opencode-mempalace-persistence plugin" + }, + "731": { + "upstream_number": 731, + "new_pr_number": 366, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/366", + "title": "docs: add Mnemoverse to projects" + }, + "732": { + "upstream_number": 732, + "new_pr_number": 367, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/367", + "title": "docs: point Agent Memory to maintained repository" + }, + "733": { + "upstream_number": 733, + "new_pr_number": 368, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/368", + "title": "docs: add Agent Run Inspector to projects" + }, + "734": { + "upstream_number": 734, + "new_pr_number": 369, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/369", + "title": "docs: add opencode-material-theme to theme" + }, + "735": { + "upstream_number": 735, + "new_pr_number": 370, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/370", + "title": "docs: add opencode-dictate to plugins" + }, + "736": { + "upstream_number": 736, + "new_pr_number": 371, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/371", + "title": "docs: add SCVD General Store integration" + }, + "737": { + "upstream_number": 737, + "new_pr_number": 372, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/372", + "title": "docs: add opencode-ocsm to projects" + }, + "738": { + "upstream_number": 738, + "new_pr_number": 373, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/373", + "title": "docs: add opencode-browser-output to plugins" + }, + "739": { + "upstream_number": 739, + "new_pr_number": 374, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/374", + "title": "docs: add agent-workbench to projects" + }, + "740": { + "upstream_number": 740, + "new_pr_number": 375, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/375", + "title": "docs: add opencode-mesh to plugins" + }, + "741": { + "upstream_number": 741, + "new_pr_number": 376, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/376", + "title": "docs: add BytesBrains Cruise plugin" + }, + "742": { + "upstream_number": 742, + "new_pr_number": 377, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/377", + "title": "docs: add opencode-toast-history to plugins" + }, + "743": { + "upstream_number": 743, + "new_pr_number": 378, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/378", + "title": "docs: add opencode-auto-todos to plugins" + }, + "744": { + "upstream_number": 744, + "new_pr_number": 379, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/379", + "title": "docs: add laya-drift to plugins" + }, + "745": { + "upstream_number": 745, + "new_pr_number": 380, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/380", + "title": "docs: add opencode-cache-compact to plugins" + }, + "746": { + "upstream_number": 746, + "new_pr_number": 381, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/381", + "title": "docs: add plain to plugins" + }, + "747": { + "upstream_number": 747, + "new_pr_number": 382, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/382", + "title": "docs: add OpenCode TUI Context plugin" + }, + "748": { + "upstream_number": 748, + "new_pr_number": 383, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/383", + "title": "docs: add agent-sessions to projects" + }, + "749": { + "upstream_number": 749, + "new_pr_number": 384, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/384", + "title": "docs: add Stay Awake to plugins" + }, + "750": { + "upstream_number": 750, + "new_pr_number": 385, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/385", + "title": "docs: add Baizhi MCP resource" + }, + "751": { + "upstream_number": 751, + "new_pr_number": 386, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/386", + "title": "docs: add Stay Awake to plugins" + }, + "752": { + "upstream_number": 752, + "new_pr_number": 387, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/387", + "title": "docs: add MetaMask Agent Wallet to projects" + }, + "753": { + "upstream_number": 753, + "new_pr_number": 388, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/388", + "title": "docs: add Jev Router to plugins" + }, + "754": { + "upstream_number": 754, + "new_pr_number": 389, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/389", + "title": "docs: add opencode-dynamic-workflows to plugins" + }, + "755": { + "upstream_number": 755, + "new_pr_number": 390, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/390", + "title": "docs: add Jev Social resource" + }, + "756": { + "upstream_number": 756, + "new_pr_number": 391, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/391", + "title": "docs: add telepathy to plugins" + }, + "758": { + "upstream_number": 758, + "new_pr_number": 392, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/392", + "title": "docs: add Sabi adaptive inference router" + }, + "759": { + "upstream_number": 759, + "new_pr_number": 393, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/393", + "title": "docs: add ocm to projects" + }, + "760": { + "upstream_number": 760, + "new_pr_number": 394, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/394", + "title": "docs: add opencode-session-tools to plugins" + }, + "761": { + "upstream_number": 761, + "new_pr_number": 395, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/395", + "title": "Add OpenMate: offline-first Android client for opencode" + }, + "762": { + "upstream_number": 762, + "new_pr_number": 396, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/396", + "title": "Add Free Models Router plugin" + }, + "764": { + "upstream_number": 764, + "new_pr_number": 397, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/397", + "title": "docs: add DataCloak to plugins" + }, + "765": { + "upstream_number": 765, + "new_pr_number": 398, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/398", + "title": "Add Timeline Viewer plugin" + }, + "766": { + "upstream_number": 766, + "new_pr_number": 399, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/399", + "title": "Repair and simplify the Kibi plugin listing" + }, + "767": { + "upstream_number": 767, + "new_pr_number": 400, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/400", + "title": "docs: add opencode-workflows to plugins" + }, + "768": { + "upstream_number": 768, + "new_pr_number": 401, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/401", + "title": "docs: add aftermath to plugins" + }, + "769": { + "upstream_number": 769, + "new_pr_number": 402, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/402", + "title": "Add OpenCode Crosstalk to plugins" + }, + "770": { + "upstream_number": 770, + "new_pr_number": 403, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/403", + "title": "Add SpringBrand to projects" + }, + "771": { + "upstream_number": 771, + "new_pr_number": 404, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/404", + "title": "docs: add four aiev plugins" + }, + "772": { + "upstream_number": 772, + "new_pr_number": 405, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/405", + "title": "Add opencode-memento to plugins" + }, + "773": { + "upstream_number": 773, + "new_pr_number": 406, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/406", + "title": "Add OpenCode Vitals to plugins" + }, + "774": { + "upstream_number": 774, + "new_pr_number": 407, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/407", + "title": "docs: add opencode-seatbelt to plugins" + }, + "776": { + "upstream_number": 776, + "new_pr_number": 408, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/408", + "title": "docs: add ultraopen to plugins" + }, + "778": { + "upstream_number": 778, + "new_pr_number": 409, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/409", + "title": "docs: add Aide to projects" + }, + "779": { + "upstream_number": 779, + "new_pr_number": 410, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/410", + "title": "docs: add aegis-devops to plugins" + }, + "780": { + "upstream_number": 780, + "new_pr_number": 411, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/411", + "title": "Add Kortix (open-source AI Management System, harness powered by OpenCode) to PROJECTS" + }, + "781": { + "upstream_number": 781, + "new_pr_number": 412, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/412", + "title": "docs: add opencode-skills-autocomplete to plugins" + }, + "782": { + "upstream_number": 782, + "new_pr_number": 413, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/413", + "title": "docs: add Kranz MCP integration" + }, + "785": { + "upstream_number": 785, + "new_pr_number": 414, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/414", + "title": "docs: add duplex to projects" + }, + "786": { + "upstream_number": 786, + "new_pr_number": 415, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/415", + "title": "docs: add opencode-dir-tree-tui to plugins" + }, + "787": { + "upstream_number": 787, + "new_pr_number": 416, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/416", + "title": "docs: add opencode-skills-tui to plugins" + }, + "788": { + "upstream_number": 788, + "new_pr_number": 417, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/417", + "title": "docs: add agent-manager to projects" + }, + "789": { + "upstream_number": 789, + "new_pr_number": 418, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/418", + "title": "docs: add OpenCode Sentry (Android alerts) to projects" + }, + "790": { + "upstream_number": 790, + "new_pr_number": 419, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/419", + "title": "docs: add opencode-headroom-plugin to plugins" + }, + "793": { + "upstream_number": 793, + "new_pr_number": 420, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/420", + "title": "add: SRO (Security Research Orchestrator) to plugins" + }, + "794": { + "upstream_number": 794, + "new_pr_number": 421, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/421", + "title": "docs: add dotpals to projects" + }, + "795": { + "upstream_number": 795, + "new_pr_number": 422, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/422", + "title": "docs: add claudex-switch to projects" + }, + "796": { + "upstream_number": 796, + "new_pr_number": 423, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/423", + "title": "docs: add opencode-docker-panel to plugins" + }, + "797": { + "upstream_number": 797, + "new_pr_number": 424, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/424", + "title": "docs: add opencode-serpapi to plugins" + }, + "798": { + "upstream_number": 798, + "new_pr_number": 425, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/425", + "title": "Add Aevral (AI security review for pull requests)" + }, + "799": { + "upstream_number": 799, + "new_pr_number": 426, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/426", + "title": "docs: add sdlc-assist to projects" + }, + "800": { + "upstream_number": 800, + "new_pr_number": 427, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/427", + "title": "docs: add jes to plugins" + }, + "801": { + "upstream_number": 801, + "new_pr_number": 428, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/428", + "title": "docs: add PriceWin to projects" + }, + "802": { + "upstream_number": 802, + "new_pr_number": 429, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/429", + "title": "docs: add gutchapa-opencode-telegram to projects" + }, + "803": { + "upstream_number": 803, + "new_pr_number": 430, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/430", + "title": "docs: add herdr-reviewr to projects" + }, + "804": { + "upstream_number": 804, + "new_pr_number": 431, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/431", + "title": "docs: add caprock to projects" + }, + "805": { + "upstream_number": 805, + "new_pr_number": 432, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/432", + "title": "docs: add session-title, worktree-tools and backslash-newline plugins" + }, + "806": { + "upstream_number": 806, + "new_pr_number": 433, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/433", + "title": "docs: add telemetry.dev OpenCode plugin" + }, + "807": { + "upstream_number": 807, + "new_pr_number": 434, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/434", + "title": "docs: add opencode-secrets-env to plugins" + }, + "808": { + "upstream_number": 808, + "new_pr_number": 435, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/435", + "title": "docs: add crit to projects" + }, + "809": { + "upstream_number": 809, + "new_pr_number": 436, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/436", + "title": "docs: add open-memex to plugins" + }, + "810": { + "upstream_number": 810, + "new_pr_number": 437, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/437", + "title": "docs: add opencode-shortcuts and opencode-background-tasks to plugins" + }, + "811": { + "upstream_number": 811, + "new_pr_number": 438, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/438", + "title": "docs: add read-aloud plugin" + }, + "812": { + "upstream_number": 812, + "new_pr_number": 439, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/439", + "title": "docs: add cliproxy-rs to projects" + }, + "813": { + "upstream_number": 813, + "new_pr_number": 440, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/440", + "title": "docs: add lazy-clean to plugins" + }, + "814": { + "upstream_number": 814, + "new_pr_number": 441, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/441", + "title": "Add OpenCode Model Aliases plugin configuration" + }, + "815": { + "upstream_number": 815, + "new_pr_number": 442, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/442", + "title": "docs: add OpenCode Model Router to plugins" + }, + "816": { + "upstream_number": 816, + "new_pr_number": 443, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/443", + "title": "Add opencode-voice plugin" + }, + "817": { + "upstream_number": 817, + "new_pr_number": 444, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/444", + "title": "docs(plugins): add opencode-mempalace-persistence YAML + refresh its entry" + }, + "818": { + "upstream_number": 818, + "new_pr_number": 445, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/445", + "title": "docs: add Foreman to projects" + }, + "819": { + "upstream_number": 819, + "new_pr_number": 446, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/446", + "title": "Add clm-context \u2014 CLM self-managed context plugin for opencode" + }, + "820": { + "upstream_number": 820, + "new_pr_number": 447, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/447", + "title": "docs: add mrscraper to plugins" + }, + "821": { + "upstream_number": 821, + "new_pr_number": 448, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/448", + "title": "docs: add assay to projects" + }, + "822": { + "upstream_number": 822, + "new_pr_number": 449, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/449", + "title": "docs: add Ritemark to projects" + }, + "823": { + "upstream_number": 823, + "new_pr_number": 450, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/450", + "title": "Add OpenRouter Websearch to plugins" + }, + "824": { + "upstream_number": 824, + "new_pr_number": 451, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/451", + "title": "docs: add opencode-provider-guard to plugins" + }, + "827": { + "upstream_number": 827, + "new_pr_number": 452, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/452", + "title": "docs: add magents to projects" + }, + "828": { + "upstream_number": 828, + "new_pr_number": 453, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/453", + "title": "docs: add Dialbot MCP to projects" + }, + "829": { + "upstream_number": 829, + "new_pr_number": 454, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/454", + "title": "docs: add homie to plugins" + }, + "830": { + "upstream_number": 830, + "new_pr_number": 455, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/455", + "title": "docs: add /call-me to projects" + }, + "831": { + "upstream_number": 831, + "new_pr_number": 456, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/456", + "title": "Add opencode-indexing: semantic code search (reuses Kilo Code index)" + }, + "832": { + "upstream_number": 832, + "new_pr_number": 457, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/457", + "title": "docs: add Geneseed to projects" + }, + "833": { + "upstream_number": 833, + "new_pr_number": 458, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/458", + "title": "docs: add yoink to projects" + }, + "834": { + "upstream_number": 834, + "new_pr_number": 459, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/459", + "title": "docs: add nsq to projects" + }, + "835": { + "upstream_number": 835, + "new_pr_number": 460, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/460", + "title": "docs: add Agent Relay plugin" + }, + "836": { + "upstream_number": 836, + "new_pr_number": 461, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/461", + "title": "docs: add tapetide-mcp to resources" + }, + "837": { + "upstream_number": 837, + "new_pr_number": 462, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/462", + "title": "docs: add Faber to projects" + }, + "838": { + "upstream_number": 838, + "new_pr_number": 463, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/463", + "title": "docs: add opencode-daily-journal (plugins)" + }, + "839": { + "upstream_number": 839, + "new_pr_number": 464, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/464", + "title": "docs: add looot MCP config to resources" + }, + "840": { + "upstream_number": 840, + "new_pr_number": 465, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/465", + "title": "docs: add opencode-session-time to plugins" + }, + "841": { + "upstream_number": 841, + "new_pr_number": 466, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/466", + "title": "Add OpenWork for OpenCode plugin" + }, + "842": { + "upstream_number": 842, + "new_pr_number": 467, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/467", + "title": "docs: add opencode-topics to plugins" + }, + "843": { + "upstream_number": 843, + "new_pr_number": 468, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/468", + "title": "Add OpenCode Teamwork \u2014 multi-agent orchestration plugin" + }, + "844": { + "upstream_number": 844, + "new_pr_number": 469, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/469", + "title": "docs: add OpenCode Custom Providers to plugins" + }, + "845": { + "upstream_number": 845, + "new_pr_number": 470, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/470", + "title": "docs: update opencode-mem description" + }, + "846": { + "upstream_number": 846, + "new_pr_number": 471, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/471", + "title": "docs: add listen-stt and speak-tts to plugins" + }, + "847": { + "upstream_number": 847, + "new_pr_number": 472, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/472", + "title": "docs: add opencode-mobile to projects" + }, + "848": { + "upstream_number": 848, + "new_pr_number": 473, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/473", + "title": "docs: add vsc-opencode-gui to projects" + }, + "849": { + "upstream_number": 849, + "new_pr_number": 474, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/474", + "title": "Add OpenCode Version Footer plugin" + }, + "850": { + "upstream_number": 850, + "new_pr_number": 475, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/475", + "title": "docs: add swe-mux to projects" + }, + "851": { + "upstream_number": 851, + "new_pr_number": 476, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/476", + "title": "Create opencode-pre-tool-review.yaml for plugin" + }, + "852": { + "upstream_number": 852, + "new_pr_number": 477, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/477", + "title": "docs: add opencode-scratchpad to plugins" + }, + "853": { + "upstream_number": 853, + "new_pr_number": 478, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/478", + "title": "docs: add opencode-go-whoami to plugins" + }, + "854": { + "upstream_number": 854, + "new_pr_number": 479, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/479", + "title": "docs: add solenta to projects" + }, + "855": { + "upstream_number": 855, + "new_pr_number": 480, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/480", + "title": "docs: add employed to projects" + }, + "857": { + "upstream_number": 857, + "new_pr_number": 481, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/481", + "title": "Add opencode-rust to projects" + }, + "860": { + "upstream_number": 860, + "new_pr_number": 482, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/482", + "title": "Update froggy.yaml" + }, + "861": { + "upstream_number": 861, + "new_pr_number": 483, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/483", + "title": "docs: add Pixeltable MCP resource" + }, + "862": { + "upstream_number": 862, + "new_pr_number": 484, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/484", + "title": "Add Secret Scrubber plugin" + }, + "863": { + "upstream_number": 863, + "new_pr_number": 485, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/485", + "title": "docs: add opencode-safety-gates to plugins" + }, + "864": { + "upstream_number": 864, + "new_pr_number": 486, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/486", + "title": "docs: add Quota Board plugin for OpenCode V2" + }, + "865": { + "upstream_number": 865, + "new_pr_number": 487, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/487", + "title": "Add OpenChamber Design Studio to projects" + }, + "866": { + "upstream_number": 866, + "new_pr_number": 488, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/488", + "title": "docs: add opencode-ask to plugins" + }, + "867": { + "upstream_number": 867, + "new_pr_number": 489, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/489", + "title": "docs: add llm-roundtable to agents" + }, + "869": { + "upstream_number": 869, + "new_pr_number": 490, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/490", + "title": "docs: add opencode-stats-pills to plugins" + }, + "870": { + "upstream_number": 870, + "new_pr_number": 491, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/491", + "title": "docs: add Agent Nexus to projects" + }, + "871": { + "upstream_number": 871, + "new_pr_number": 492, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/492", + "title": "docs: add pdca-skills to agents" + }, + "872": { + "upstream_number": 872, + "new_pr_number": 493, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/493", + "title": "docs: add agentledger to projects" + }, + "873": { + "upstream_number": 873, + "new_pr_number": 494, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/494", + "title": "docs: add opencode-tg to plugins" + }, + "874": { + "upstream_number": 874, + "new_pr_number": 495, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/495", + "title": "Add opencode-awake, opencode-cost-details and opencode-prs plugins" + }, + "875": { + "upstream_number": 875, + "new_pr_number": 496, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/496", + "title": "Add Openhook callback inbox for OpenCode" + }, + "876": { + "upstream_number": 876, + "new_pr_number": 497, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/497", + "title": "docs: add opencode-unlimited-proxy to projects" + }, + "877": { + "upstream_number": 877, + "new_pr_number": 498, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/498", + "title": "docs: add JustSessions to projects" + }, + "879": { + "upstream_number": 879, + "new_pr_number": 499, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/499", + "title": "docs: add chisle to plugins" + }, + "880": { + "upstream_number": 880, + "new_pr_number": 500, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/500", + "title": "docs: add superlocalmemory to projects" + }, + "881": { + "upstream_number": 881, + "new_pr_number": 501, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/501", + "title": "Add OpenCode Todo Supervisor to plugins" + }, + "882": { + "upstream_number": 882, + "new_pr_number": 502, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/502", + "title": "Add OpenCode Autocompact to plugins" + }, + "883": { + "upstream_number": 883, + "new_pr_number": 503, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/503", + "title": "Add plugins: opencode-goal, opencode-vision, opencode-worktrees, opencode-orchestrator" + }, + "884": { + "upstream_number": 884, + "new_pr_number": 504, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/504", + "title": "docs: add SourcePier to plugins" + }, + "885": { + "upstream_number": 885, + "new_pr_number": 505, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/505", + "title": "docs: add keep-going to plugins" + }, + "886": { + "upstream_number": 886, + "new_pr_number": 506, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/506", + "title": "docs: add lore to plugins" + }, + "887": { + "upstream_number": 887, + "new_pr_number": 507, + "pr_url": "https://github.com/Heretek-AI/awesome-opencode/pull/507", + "title": "docs: add growth-architect-foundry to projects" + } +} \ No newline at end of file diff --git a/scripts/new-entry.js b/scripts/new-entry.js new file mode 100644 index 0000000..53d5b6f --- /dev/null +++ b/scripts/new-entry.js @@ -0,0 +1,72 @@ +#!/usr/bin/env node +/** + * Scaffold a catalog entry with valid formatting. + * + * Usage: + * npm run new -- --category plugins --repo https://github.com/me/opencode-thing \ + * --tagline "Does the thing" --topics memory,context [--name "Thing"] [--description "..."] \ + * [--npm opencode-thing] [--path packages/thing] [--kind plugin] [--homepage URL] + * + * Name and description default to the GitHub repo's name and description. The V2 check runs for + * plugins and fills in `compat`. Writes data//.yaml and prints any problems. + */ + +const fs = require('fs'); +const path = require('path'); +const { CATEGORIES, KINDS, TOPICS, parseRepoUrl } = require('./utils/catalog'); +const { getRepos } = require('./utils/github'); +const { buildEntry } = require('./utils/submission'); + +const ROOT = path.join(__dirname, '..'); + +function parseArgs(argv) { + const args = {}; + for (let i = 0; i < argv.length; i++) { + if (argv[i].startsWith('--')) { + const key = argv[i].slice(2); + const next = argv[i + 1]; + args[key] = next && !next.startsWith('--') ? (i++, next) : true; + } + } + return args; +} + +function usage(message) { + console.error(`${message}\n +Required: --category <${CATEGORIES.join('|')}> --repo --tagline --topics +Optional: --name --description --npm --path --kind <${KINDS.join('|')}> --homepage --installation --force +Topics (1-3, comma-separated): ${TOPICS.join(', ')}`); + process.exit(1); +} + +async function main() { + const args = parseArgs(process.argv.slice(2)); + if (!args.category || !args.repo || !args.tagline || !args.topics) usage('Missing required options.'); + + const parsed = parseRepoUrl(args.repo); + if ((!args.name || !args.description) && parsed && parsed.host === 'github.com') { + const info = (await getRepos([{ owner: parsed.owner, name: parsed.name }])).get(`${parsed.owner}/${parsed.name}`); + if (info) { + args.name = args.name || parsed.name; + args.description = args.description || info.description || undefined; + } + } + + const result = await buildEntry(args); + for (const note of result.notes) console.log(`ℹ ${note}`); + if (!result.file) usage(result.problems.join('\n')); + + const target = path.join(ROOT, result.file); + if (!result.ok && !args.force) { + console.error(`✗ Not written:\n${result.problems.map(p => ` - ${p}`).join('\n')}\n(pass --force to write it anyway and fix by hand)`); + process.exit(1); + } + fs.writeFileSync(target, result.text); + console.log(`✓ Wrote ${result.file}${result.ok ? '' : ' (with problems; run npm run validate)'}`); + console.log(result.text); +} + +main().catch(err => { + console.error(err); + process.exit(1); +}); diff --git a/scripts/reprobe.js b/scripts/reprobe.js new file mode 100644 index 0000000..2eedec2 --- /dev/null +++ b/scripts/reprobe.js @@ -0,0 +1,131 @@ +#!/usr/bin/env node +/** + * Nightly re-check of pull requests held for V2 migration (label: needs-v2). + * Usage: node scripts/reprobe.js [--dry-run] [--pr ] + * + * - Target detected as V2 (not merely "unknown"): relabel, thank the author, fill in missing kind/topics/compat on + * same-repo branches, and re-run the validate check. + * - Still V1 after HOLD_DAYS since needs-v2 was applied: close with a reopen-anytime note. + */ + +const yaml = require('js-yaml'); +const { loadCatalog } = require('./utils/catalog'); +const { probeCompat } = require('./utils/compat'); +const { dumpEntry } = require('./utils/format'); +const { rest } = require('./utils/github'); +const { analyzePullRequest } = require('./utils/pr-checks'); +const { REPO, comment, listOpenPulls, pullChanges, revalidate, setTriageLabels } = require('./utils/repo'); +const { suggestKind, suggestTopics } = require('./utils/suggest'); + +const HOLD_DAYS = 60; +const DAY = 24 * 60 * 60 * 1000; + +async function labeledAt(number, label) { + let last = null; + for (let page = 1; ; page++) { + const { data } = await rest(`/repos/${REPO}/issues/${number}/events?per_page=100&page=${page}`); + if (!Array.isArray(data)) break; + for (const ev of data) if (ev.event === 'labeled' && ev.label && ev.label.name === label) last = ev.created_at; + if (data.length < 100) break; + } + return last ? new Date(last) : null; +} + +/** Original author of an imported upstream PR, else the PR author. */ +function authorOf(pull) { + const upstream = String(pull.body || '').match(/\*\*Original Author\*\*:\s*\[@([A-Za-z0-9-]+)\]/); + return upstream ? upstream[1] : pull.user.login; +} + +async function autofix(pull, change, compat) { + const data = yaml.load(change.content); + const [, category] = change.path.split('/'); + const text = [data.name, data.tagline, data.description].join(' '); + let changed = false; + if (!data.kind) { data.kind = suggestKind(category, text); changed = true; } + if (!data.topics || !data.topics.length) { data.topics = suggestTopics(text); changed = true; } + if (data.compat !== compat) { data.compat = compat; changed = true; } + if (!changed) return false; + const { data: current } = await rest(`/repos/${REPO}/contents/${change.path}?ref=${encodeURIComponent(pull.head.ref)}`); + const res = await rest(`/repos/${REPO}/contents/${change.path}`, { + method: 'PUT', + body: { + message: `chore: fill in kind, topics and compat for ${change.path}`, + content: Buffer.from(dumpEntry(data)).toString('base64'), + sha: current.sha, + branch: pull.head.ref + } + }); + if (res.status >= 300) throw new Error(`autofix ${change.path}: HTTP ${res.status}`); + return true; +} + +async function handle(pull, baseEntries, dryRun) { + const changes = await pullChanges(pull); + const plugins = changes.filter(c => /^data\/plugins\/[^/]+\.yaml$/.test(c.path) && c.status === 'added' && c.content); + const parsed = plugins.map(c => { try { return { c, data: yaml.load(c.content) }; } catch { return null; } }).filter(x => x && x.data && x.data.repo); + if (!parsed.length) return `#${pull.number}: no plugin entries to re-check`; + + const results = await probeCompat(parsed.map(({ c, data }) => ({ key: c.path, repo: data.repo, path: data.path, npm: data.npm, plugin: true }))); + // Only a positive V2 detection unblocks; "unknown" keeps the hold (the reviewer saw V1 code) + const migrated = parsed.every(({ c }) => results.get(c.path).compat === 'v2'); + + if (migrated) { + const sameRepo = pull.head.repo && pull.head.repo.full_name === REPO; + if (dryRun) return `#${pull.number}: now ${parsed.map(({ c }) => results.get(c.path).compat).join(', ')} -> would unblock`; + let fixed = false; + if (sameRepo) { + for (const { c } of parsed) fixed = (await autofix(pull, c, results.get(c.path).compat)) || fixed; + } + const fresh = fixed ? await pullChanges((await rest(`/repos/${REPO}/pulls/${pull.number}`)).data) : changes; + const analysis = await analyzePullRequest({ changes: fresh, baseEntries }); + await setTriageLabels(pull.number, analysis.labels, pull.labels.map(l => l.name)); + const evidence = parsed.map(({ c }) => `\`${c.path}\`: ${results.get(c.path).compat} (${results.get(c.path).evidence.join('; ')})`).join('\n- '); + await comment(pull.number, [ + `@${authorOf(pull)} the nightly check now detects OpenCode V2 support. Thank you for migrating!`, + '', + `- ${evidence}`, + fixed ? '\nThe entry was updated with `kind`, `topics` and `compat` so it matches the current schema.' : '', + analysis.errors.length ? '\nA few metadata items still need fixing; see the checks on this PR.' : '\nAll automated checks pass; a maintainer will merge this shortly.' + ].join('\n')); + await revalidate((await rest(`/repos/${REPO}/pulls/${pull.number}`)).data); + return `#${pull.number}: unblocked (${analysis.labels.join(', ')})`; + } + + const since = await labeledAt(pull.number, 'needs-v2'); + const days = since ? Math.floor((Date.now() - since.getTime()) / DAY) : 0; + if (days < HOLD_DAYS) return `#${pull.number}: still V1 (${days}/${HOLD_DAYS} days)`; + if (dryRun) return `#${pull.number}: still V1 after ${days} days -> would close`; + await comment(pull.number, [ + `@${authorOf(pull)} closing this for now: the target is still on the legacy V1 plugin API ${days} days after the V2 migration request.`, + '', + 'Reopen this PR (or submit again through the "Add an entry" issue form) once the plugin depends on `@opencode/plugin` and exports `Plugin.define({ id, setup(ctx) })`. See [docs/policy.md](https://github.com/Heretek-AI/awesome-opencode/blob/main/docs/policy.md).' + ].join('\n')); + await rest(`/repos/${REPO}/pulls/${pull.number}`, { method: 'PATCH', body: { state: 'closed' } }); + return `#${pull.number}: closed after ${days} days on V1`; +} + +async function main() { + const argv = process.argv.slice(2); + const dryRun = argv.includes('--dry-run'); + const only = argv.includes('--pr') ? Number(argv[argv.indexOf('--pr') + 1]) : null; + + const pulls = (await listOpenPulls()).filter(p => (only ? p.number === only : p.labels.some(l => l.name === 'needs-v2'))); + const { entries } = loadCatalog(); + console.log(`Re-checking ${pulls.length} PR(s) labeled needs-v2${dryRun ? ' (dry run)' : ''}`); + let failures = 0; + for (const pull of pulls) { + try { + console.log(await handle(pull, entries, dryRun)); + } catch (err) { + failures++; + console.error(`#${pull.number}: ${err.message}`); + } + } + if (failures) process.exit(1); +} + +main().catch(err => { + console.error(err); + process.exit(1); +}); diff --git a/scripts/review/run-review-loop.py b/scripts/review/run-review-loop.py new file mode 100755 index 0000000..3e934fb --- /dev/null +++ b/scripts/review/run-review-loop.py @@ -0,0 +1,451 @@ +#!/usr/bin/env python3 +""" +Orchestrates an autonomous review loop using OpenCode CLI (opencode run) to assess +open Pull Requests and Issues on Heretek-AI/awesome-opencode for quality and OpenCode V2 compatibility. +""" + +import argparse +import json +import os +import re +import subprocess +import sys +import time +import urllib.request +import urllib.error + +REPO = "Heretek-AI/awesome-opencode" +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +PROJECT_ROOT = os.path.abspath(os.path.join(SCRIPT_DIR, "../..")) +PROMPT_FILE = os.path.join(PROJECT_ROOT, "prompts/opencode-review-loop.md") +REVIEWS_DIR = os.path.join(PROJECT_ROOT, "reviews") +STATE_FILE = os.path.join(REVIEWS_DIR, "review_state.json") +RESULTS_FILE = os.path.join(REVIEWS_DIR, "review_results.json") +SUMMARY_FILE = os.path.join(REVIEWS_DIR, "summary.md") + +def load_prompt(): + with open(PROMPT_FILE, "r", encoding="utf-8") as f: + return f.read() + +def load_state(): + if os.path.exists(STATE_FILE): + try: + with open(STATE_FILE, "r", encoding="utf-8") as f: + return json.load(f) + except Exception: + pass + return {"processed_prs": {}, "processed_issues": {}} + +def save_state(state): + os.makedirs(REVIEWS_DIR, exist_ok=True) + with open(STATE_FILE, "w", encoding="utf-8") as f: + json.dump(state, f, indent=2) + +def save_results(results): + os.makedirs(REVIEWS_DIR, exist_ok=True) + with open(RESULTS_FILE, "w", encoding="utf-8") as f: + json.dump(results, f, indent=2) + +def append_to_summary(item_type, num, title, target_name, verdict, v2_status, confidence, reason): + os.makedirs(REVIEWS_DIR, exist_ok=True) + header_needed = not os.path.exists(SUMMARY_FILE) or os.path.getsize(SUMMARY_FILE) == 0 + with open(SUMMARY_FILE, "a", encoding="utf-8") as f: + if header_needed: + f.write("# Awesome-OpenCode Backlog Review Summary\n\n") + f.write("Autonomous review powered by OpenCode evaluating OpenCode V2 compatibility and catalog quality.\n\n") + f.write("| Type | # | Title | Target Name | V2 Status | Verdict | Conf | Reason |\n") + f.write("| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n") + safe_title = (title or "").replace("|", "-")[:35] + safe_target = (target_name or "N/A").replace("|", "-")[:25] + safe_status = (v2_status or "UNKNOWN").replace("|", "-") + safe_verdict = (verdict or "UNKNOWN").replace("|", "-") + safe_reason = (reason or "").replace("|", "-").replace("\n", " ") + f.write(f"| {item_type} | [{num}](https://github.com/{REPO}/{'pull' if item_type == 'PR' else 'issues'}/{num}) | {safe_title} | {safe_target} | `{safe_status}` | **`{safe_verdict}`** | {confidence}% | {safe_reason} |\n") + +def fetch_open_prs(): + print("Fetching open PRs from GitHub...") + out = subprocess.check_output([ + "gh", "pr", "list", + "-R", REPO, + "--state", "open", + "--limit", "600", + "--json", "number,title,body,author,headRefName,createdAt,url" + ], text=True) + prs = json.loads(out) + prs.sort(key=lambda x: x["number"]) + return prs + +def fetch_open_issues(): + print("Fetching open issues from GitHub...") + out = subprocess.check_output([ + "gh", "issue", "list", + "-R", REPO, + "--state", "open", + "--limit", "100", + "--json", "number,title,body,author,createdAt,url" + ], text=True) + issues = json.loads(out) + issues.sort(key=lambda x: x["number"]) + return issues + +def inspect_target_repo(repo_url): + """Gathers factual evidence from target GitHub repo (commit dates, package.json dependencies).""" + facts = {"repo_url": repo_url, "exists": False} + match = re.search(r'github\.com/([^/]+)/([^/#?]+)', repo_url or "") + if not match: + return facts + + owner, repo_name = match.group(1), match.group(2).removesuffix(".git") + api_url = f"https://api.github.com/repos/{owner}/{repo_name}" + + # 1. Check repo status via gh api + try: + raw = subprocess.check_output(["gh", "api", api_url, "--jq", "{archived, pushed_at, stargazers_count, default_branch, description}"], text=True) + repo_data = json.loads(raw) + facts["exists"] = True + facts["archived"] = repo_data.get("archived", False) + facts["pushed_at"] = repo_data.get("pushed_at") + facts["stars"] = repo_data.get("stargazers_count", 0) + facts["default_branch"] = repo_data.get("default_branch", "main") + facts["description"] = repo_data.get("description", "") + except Exception as e: + facts["error"] = str(e) + return facts + + # 2. Check package.json for @opencode/plugin or @opencode-ai/plugin + branch = facts.get("default_branch", "HEAD") + pkg_url = f"https://raw.githubusercontent.com/{owner}/{repo_name}/{branch}/package.json" + try: + req = urllib.request.Request(pkg_url, headers={"User-Agent": "OpenCode-Reviewer"}) + with urllib.request.urlopen(req, timeout=5) as resp: + pkg_data = json.loads(resp.read().decode("utf-8")) + deps = {} + deps.update(pkg_data.get("dependencies", {})) + deps.update(pkg_data.get("devDependencies", {})) + deps.update(pkg_data.get("peerDependencies", {})) + + opencode_deps = {k: v for k, v in deps.items() if "opencode" in k.lower()} + facts["opencode_dependencies"] = opencode_deps + if "@opencode/plugin" in opencode_deps: + facts["v2_plugin_package_detected"] = True + if "@opencode-ai/plugin" in opencode_deps: + facts["v1_plugin_package_detected"] = True + except Exception: + facts["package_json_found"] = False + + return facts + +def get_pr_diff_files(pr_number, head_ref): + """Retrieves diff or file list from git or gh CLI.""" + try: + out = subprocess.check_output([ + "gh", "pr", "view", str(pr_number), + "-R", REPO, + "--json", "files" + ], text=True) + data = json.loads(out) + files = data.get("files", []) + return files + except Exception: + return [] + +def get_pr_file_content(head_ref, file_path): + """Fetches the content of a file from the PR branch.""" + ref = f"origin/{head_ref}" + try: + out = subprocess.check_output(["git", "show", f"{ref}:{file_path}"], text=True) + return out + except Exception: + # Fallback to local ref + try: + return subprocess.check_output(["git", "show", f"refs/remotes/{head_ref}:{file_path}"], text=True) + except Exception: + return None + +def invoke_opencode_review(system_prompt, item_context, model=None): + """Invokes opencode run with the formatted prompt.""" + combined_message = ( + f"{system_prompt}\n\n" + f"---\n\n" + f"# ITEM TO REVIEW NOW\n\n" + f"{item_context}\n\n" + f"Please inspect the facts above and provide your complete review and assessment.\n" + f"You MUST include the final assessment in the requested JSON block." + ) + + cmd = ["opencode", "run"] + if model: + cmd.extend(["-m", model]) + cmd.append(combined_message) + + try: + out = subprocess.check_output(cmd, text=True, timeout=120) + return out + except subprocess.TimeoutExpired: + return json.dumps({"error": "OpenCode review timed out after 120s"}) + except subprocess.CalledProcessError as e: + return f"OpenCode run failed with exit code {e.returncode}: {e.output}" + +def parse_json_verdict(raw_output): + """Extracts JSON block from OpenCode output.""" + match = re.search(r'```json\s*(\{.*?\})\s*```', raw_output, re.DOTALL) + if match: + try: + return json.loads(match.group(1)) + except Exception: + pass + # Fallback search for bare JSON object + match2 = re.search(r'(\{[\s\S]*"verdict"[\s\S]*\})', raw_output) + if match2: + try: + return json.loads(match2.group(1)) + except Exception: + pass + return None + +def review_pr(pr, system_prompt, dry_run=False, model=None): + num = pr["number"] + title = pr["title"] + head_ref = pr.get("headRefName", f"upstream-pr/{num}") + print(f"\n==================================================") + print(f"🔍 Reviewing PR #{num}: {title[:60]}") + print(f"==================================================") + + files = get_pr_diff_files(num, head_ref) + yaml_files = [f["path"] for f in files if f.get("path", "").startswith("data/") and f.get("path", "").endswith(".yaml")] + + yaml_content = None + target_repo_url = None + if yaml_files: + yaml_content = get_pr_file_content(head_ref, yaml_files[0]) + if yaml_content: + repo_match = re.search(r'repo:\s*([^\s\n]+)', yaml_content) + if repo_match: + target_repo_url = repo_match.group(1) + + # Fallback to searching body if no yaml repo found + if not target_repo_url: + candidates = re.findall(r'https?://github\.com/[a-zA-Z0-9_\-]+/[a-zA-Z0-9_\-]+', pr.get("body", "")) + for c in candidates: + if not any(skip in c for skip in ("awesome-opencode", "Heretek-AI", "sindresorhus", "anomalyco/opencode")): + target_repo_url = c + break + + # Inspect target repo facts + facts = {} + if target_repo_url: + print(f" Investigating target repository: {target_repo_url}...") + facts = inspect_target_repo(target_repo_url) + + item_context = ( + f"### Pull Request Metadata\n" + f"- **PR Number**: #{num}\n" + f"- **Title**: {title}\n" + f"- **Author**: {pr.get('author', {}).get('login', 'unknown')}\n" + f"- **Created At**: {pr.get('createdAt')}\n" + f"- **Changed Files**: {', '.join(f.get('path', '') for f in files)}\n\n" + f"### Submitted YAML Content\n" + f"```yaml\n{yaml_content or '*No YAML file found in PR*'}\n```\n\n" + f"### PR Body / Description\n" + f"{pr.get('body', '')}\n\n" + f"### Verified Target Repository Facts\n" + f"```json\n{json.dumps(facts, indent=2)}\n```" + ) + + if dry_run: + print(" [DRY-RUN] Item context prepared. OpenCode execution skipped.") + return { + "item_type": "PR", + "item_number": num, + "title": title, + "verdict": "DRY_RUN", + "v2_status": "UNKNOWN", + "confidence_score": 0, + "summary_reason": "Dry-run execution", + "facts": facts + } + + print(" Running OpenCode evaluation...") + raw_response = invoke_opencode_review(system_prompt, item_context, model=model) + verdict = parse_json_verdict(raw_response) + if not verdict: + print(" ⚠️ Warning: Could not parse structured JSON from OpenCode output. Storing raw output.") + verdict = { + "item_type": "PR", + "item_number": num, + "title": title, + "verdict": "PARSE_ERROR", + "v2_status": "UNKNOWN", + "confidence_score": 0, + "summary_reason": "Failed to parse structured JSON from model", + "raw_output": raw_response + } + else: + print(f" ✅ Verdict: {verdict.get('verdict')} | V2 Status: {verdict.get('opencode_v2_status')} (Confidence: {verdict.get('confidence_score')}%)") + print(f" 💡 Rationale: {verdict.get('summary_reason')}") + + return verdict + +def review_issue(issue, system_prompt, dry_run=False, model=None): + num = issue["number"] + title = issue["title"] + print(f"\n==================================================") + print(f"🔍 Reviewing Issue #{num}: {title[:60]}") + print(f"==================================================") + + body = issue.get("body", "") + target_repo_url = None + body_match = re.search(r'https?://github\.com/[a-zA-Z0-9_\-]+/[a-zA-Z0-9_\-]+', body) + if body_match: + target_repo_url = body_match.group(0) + + facts = {} + if target_repo_url: + print(f" Investigating target repository: {target_repo_url}...") + facts = inspect_target_repo(target_repo_url) + + item_context = ( + f"### Issue Metadata\n" + f"- **Issue Number**: #{num}\n" + f"- **Title**: {title}\n" + f"- **Author**: {issue.get('author', {}).get('login', 'unknown')}\n" + f"- **Created At**: {issue.get('createdAt')}\n\n" + f"### Issue Body\n" + f"{body}\n\n" + f"### Verified Target Repository Facts\n" + f"```json\n{json.dumps(facts, indent=2)}\n```" + ) + + if dry_run: + print(" [DRY-RUN] Item context prepared. OpenCode execution skipped.") + return { + "item_type": "ISSUE", + "item_number": num, + "title": title, + "verdict": "DRY_RUN", + "v2_status": "UNKNOWN", + "confidence_score": 0, + "summary_reason": "Dry-run execution", + "facts": facts + } + + print(" Running OpenCode evaluation...") + raw_response = invoke_opencode_review(system_prompt, item_context, model=model) + verdict = parse_json_verdict(raw_response) + if not verdict: + print(" ⚠️ Warning: Could not parse structured JSON from OpenCode output.") + verdict = { + "item_type": "ISSUE", + "item_number": num, + "title": title, + "verdict": "PARSE_ERROR", + "v2_status": "UNKNOWN", + "confidence_score": 0, + "summary_reason": "Failed to parse structured JSON from model", + "raw_output": raw_response + } + else: + print(f" ✅ Verdict: {verdict.get('verdict')} | V2 Status: {verdict.get('opencode_v2_status')} (Confidence: {verdict.get('confidence_score')}%)") + print(f" 💡 Rationale: {verdict.get('summary_reason')}") + + return verdict + +def main(): + parser = argparse.ArgumentParser(description="Run OpenCode review loop over open PRs and issues.") + parser.add_argument("--limit", type=int, default=None, help="Maximum number of items to review") + parser.add_argument("--pr", type=int, default=None, help="Review a single PR by number") + parser.add_argument("--issue", type=int, default=None, help="Review a single issue by number") + parser.add_argument("--prs-only", action="store_true", help="Review only PRs") + parser.add_argument("--issues-only", action="store_true", help="Review only issues") + parser.add_argument("--dry-run", action="store_true", help="Collect data without calling OpenCode LLM") + parser.add_argument("--model", type=str, default=None, help="Model override for OpenCode (e.g. deepseek/deepseek-flash)") + parser.add_argument("--reset", action="store_true", help="Reset state file before running") + args = parser.parse_args() + + if args.reset and os.path.exists(STATE_FILE): + os.remove(STATE_FILE) + print("Cleared review state.") + + state = load_state() + system_prompt = load_prompt() + processed_count = 0 + + # 1. Single PR Mode + if args.pr: + prs = fetch_open_prs() + target = next((p for p in prs if p["number"] == args.pr), None) + if not target: + sys.exit(f"PR #{args.pr} not found or not open.") + verdict = review_pr(target, system_prompt, dry_run=args.dry_run, model=args.model) + state["processed_prs"][str(args.pr)] = verdict + save_state(state) + append_to_summary("PR", args.pr, target["title"], verdict.get("target_name", ""), verdict.get("verdict", ""), verdict.get("opencode_v2_status", ""), verdict.get("confidence_score", 0), verdict.get("summary_reason", "")) + return + + # 2. Single Issue Mode + if args.issue: + issues = fetch_open_issues() + target = next((i for i in issues if i["number"] == args.issue), None) + if not target: + sys.exit(f"Issue #{args.issue} not found or not open.") + verdict = review_issue(target, system_prompt, dry_run=args.dry_run, model=args.model) + state["processed_issues"][str(args.issue)] = verdict + save_state(state) + append_to_summary("ISSUE", args.issue, target["title"], verdict.get("target_name", ""), verdict.get("verdict", ""), verdict.get("opencode_v2_status", ""), verdict.get("confidence_score", 0), verdict.get("summary_reason", "")) + return + + # 3. Batch Loop Mode + items_to_process = [] + if not args.prs_only and not args.issues_only: + # Interleave or process issues first then PRs + issues = fetch_open_issues() + prs = fetch_open_prs() + for i in issues: + if str(i["number"]) not in state["processed_issues"]: + items_to_process.append(("ISSUE", i)) + for p in prs: + if str(p["number"]) not in state["processed_prs"]: + items_to_process.append(("PR", p)) + elif args.issues_only: + issues = fetch_open_issues() + for i in issues: + if str(i["number"]) not in state["processed_issues"]: + items_to_process.append(("ISSUE", i)) + elif args.prs_only: + prs = fetch_open_prs() + for p in prs: + if str(p["number"]) not in state["processed_prs"]: + items_to_process.append(("PR", p)) + + print(f"\nUnreviewed backlog items in queue: {len(items_to_process)}") + if args.limit: + items_to_process = items_to_process[:args.limit] + print(f"Limiting to first {len(items_to_process)} items as requested.") + + for idx, (kind, item) in enumerate(items_to_process, 1): + num = item["number"] + print(f"\n[{idx}/{len(items_to_process)}] Processing {kind} #{num}...") + if kind == "PR": + verdict = review_pr(item, system_prompt, dry_run=args.dry_run, model=args.model) + state["processed_prs"][str(num)] = verdict + else: + verdict = review_issue(item, system_prompt, dry_run=args.dry_run, model=args.model) + state["processed_issues"][str(num)] = verdict + + save_state(state) + append_to_summary( + kind, num, item["title"], + verdict.get("target_name", ""), + verdict.get("verdict", ""), + verdict.get("opencode_v2_status", ""), + verdict.get("confidence_score", 0), + verdict.get("summary_reason", "") + ) + processed_count += 1 + time.sleep(1.0) + + print(f"\n🎉 Review loop batch complete! Processed {processed_count} items.") + print(f"Results recorded in {SUMMARY_FILE} and {STATE_FILE}") + +if __name__ == "__main__": + main() diff --git a/scripts/scout.js b/scripts/scout.js new file mode 100644 index 0000000..8dba76f --- /dev/null +++ b/scripts/scout.js @@ -0,0 +1,251 @@ +#!/usr/bin/env node +/** + * Discover OpenCode V2 plugins that are not in the catalog yet. + * + * Usage: + * node scripts/scout.js run [--dry-run] [--limit 20] weekly: post a ranked candidate issue + * node scripts/scout.js accept --issue [--sender ] [--dry-run] + * open PRs for ticked candidates (sender needs write access) + * + * Sources: npm search (packages published since V2 shipped, depending on @opencode/*). npm gives + * structured dependencies, download counts and repository links; GitHub code search caps at + * 1,000 results per query and only reports approximate counts. + * Gates: public, not archived, not a fork, has a license, V2 dependency. Ranking: weekly downloads, + * then stars. Humans pick; the bot only does the typing. + */ + +const fs = require('fs'); +const path = require('path'); +const { canonicalKey, loadCatalog, parseRepoUrl } = require('./utils/catalog'); +const { manifestMarkers } = require('./utils/compat'); +const { getNpmLatest, getNpmWeeklyDownloads, getRepos, rest } = require('./utils/github'); +const { openPullRequest } = require('./utils/git-pr'); +const { REPO, ensureLabels, listOpenPulls } = require('./utils/repo'); +const { buildEntry } = require('./utils/submission'); +const { suggestKind, suggestTopics } = require('./utils/suggest'); + +const V2_RELEASED = '2026-09-02'; +const SEARCHES = ['keywords:opencode-plugin', '@opencode/plugin', 'keywords:opencode']; +const DECLINED_FILE = path.join(__dirname, '../discovery/declined.txt'); +const DATA_RE = //s; +const ACCEPT_LIMIT = 10; + +async function npmSearch(text) { + const results = []; + for (let from = 0; from < 1000; from += 250) { + const res = await fetch(`https://registry.npmjs.org/-/v1/search?text=${encodeURIComponent(text)}&size=250&from=${from}`, { headers: { 'User-Agent': 'awesome-opencode-bot' } }); + if (!res.ok) break; + const body = await res.json(); + results.push(...body.objects.map(o => o.package)); + if (body.objects.length < 250) break; + } + return results; +} + +async function mapLimit(items, limit, fn) { + const out = new Array(items.length); + let next = 0; + await Promise.all(Array.from({ length: limit }, async () => { + while (next < items.length) { + const i = next++; + out[i] = await fn(items[i]).catch(() => null); + } + })); + return out; +} + +function readDeclined() { + if (!fs.existsSync(DECLINED_FILE)) return new Set(); + return new Set(fs.readFileSync(DECLINED_FILE, 'utf8').split('\n').map(l => l.replace(/#.*/, '').trim().toLowerCase()).filter(Boolean)); +} + +function repoFromManifest(manifest) { + const raw = typeof manifest.repository === 'string' ? manifest.repository : manifest.repository && manifest.repository.url; + const m = String(raw || '').match(/github\.com[/:]([^/]+)\/([^/#.]+?)(?:\.git)?(?:[#/]|$)/) || String(raw || '').match(/^github:([^/]+)\/(.+)$/) || String(raw || '').match(/^([A-Za-z0-9-]+)\/([A-Za-z0-9_.-]+)$/); + if (!m) return null; + const directory = manifest.repository && manifest.repository.directory; + return { repo: `https://github.com/${m[1]}/${m[2]}`, path: directory ? String(directory).replace(/^\.?\/+|\/+$/g, '') : undefined }; +} + +/** Repo URLs and npm names already targeted by open PRs. */ +async function openPullTargets() { + const targets = new Set(); + for (const pull of await listOpenPulls()) { + const { data: files } = await rest(`/repos/${REPO}/pulls/${pull.number}/files?per_page=100`); + for (const f of Array.isArray(files) ? files : []) { + for (const m of String(f.patch || '').matchAll(/^\+\s*(repo|npm):\s*["']?([^\s"']+)/gm)) { + targets.add(m[1] === 'repo' ? canonicalKey({ repo: m[2] }) : `npm:${m[2].toLowerCase()}`); + } + } + } + return targets; +} + +function truncate(text, max) { + const clean = String(text || '').replace(/\s+/g, ' ').trim(); + if (clean.length <= max) return clean; + return clean.slice(0, max - 1).replace(/\s+\S*$/, '') + '…'; +} + +async function findCandidates(limit) { + const { entries } = loadCatalog(); + const known = new Set(entries.map(e => canonicalKey(e.data))); + entries.forEach(e => e.data.npm && known.add(`npm:${e.data.npm.toLowerCase()}`)); + const declined = readDeclined(); + const pending = await openPullTargets(); + + const seen = new Map(); + for (const query of SEARCHES) { + for (const pkg of await npmSearch(query)) { + if (pkg.date >= V2_RELEASED && !seen.has(pkg.name)) seen.set(pkg.name, pkg); + } + } + const fresh = [...seen.values()].filter(p => !known.has(`npm:${p.name}`) && !pending.has(`npm:${p.name}`) && !declined.has(p.name.toLowerCase())); + console.log(`npm: ${seen.size} packages published since ${V2_RELEASED}, ${fresh.length} not yet listed`); + + const manifests = await mapLimit(fresh, 8, p => getNpmLatest(p.name)); + const v2 = []; + fresh.forEach((pkg, i) => { + const manifest = manifests[i]; + if (!manifest || manifest.deprecated) return; + const markers = manifestMarkers(manifest); + const source = repoFromManifest(manifest); + if (!markers.v2.length || !source) return; + const key = canonicalKey(source); + const repoKey = canonicalKey({ repo: source.repo }); + if (known.has(key) || known.has(repoKey) || pending.has(repoKey) || declined.has(key) || declined.has(repoKey)) return; + v2.push({ pkg, manifest, source, markers }); + }); + console.log(`${v2.length} depend on @opencode/* with a GitHub repo`); + + const repos = await getRepos(v2.map(c => { const p = parseRepoUrl(c.source.repo); return { owner: p.owner, name: p.name }; })); + const gated = v2.filter(c => { + const p = parseRepoUrl(c.source.repo); + const info = repos.get(`${p.owner}/${p.name}`); + c.info = info; + if (!info || info.isArchived || info.isFork || info.isPrivate || !(info.licenseInfo || c.manifest.license)) return false; + // npm repository links often point at a pre-transfer name; dedupe on GitHub's canonical name + c.source.repo = `https://github.com/${info.nameWithOwner}`; + const key = canonicalKey({ repo: c.source.repo }); + return !known.has(key) && !known.has(canonicalKey(c.source)) && !pending.has(key) && !declined.has(key); + }); + // One candidate per repo (monorepos publish several packages; keep the most downloaded) + await mapLimit(gated, 8, async c => { c.downloads = await getNpmWeeklyDownloads(c.pkg.name); }); + const byRepo = new Map(); + for (const c of gated) { + const key = canonicalKey(c.source); + if (!byRepo.has(key) || byRepo.get(key).downloads < c.downloads) byRepo.set(key, c); + } + const ranked = [...byRepo.values()].sort((a, b) => b.downloads - a.downloads || b.info.stargazerCount - a.info.stargazerCount); + console.log(`${gated.length} pass the gates; ${ranked.length} distinct repos`); + return ranked.slice(0, limit); +} + +function candidateInput(c) { + const description = truncate(c.info.description || c.manifest.description || c.pkg.description || '', 600); + const text = [c.pkg.name, description, (c.manifest.keywords || []).join(' ')].join(' '); + // Packages built on the plugin API are plugins; other @opencode/* consumers (SDK/client) are projects + const isPlugin = c.markers.v2.some(m => /^@opencode(-ai)?\/plugin\b/.test(m)); + const category = isPlugin ? 'plugins' : 'projects'; + return { + name: c.pkg.name, + repo: c.source.repo, + path: c.source.path, + npm: c.pkg.name, + category, + kind: isPlugin ? 'plugin' : suggestKind('projects', text), + topics: suggestTopics(text), + tagline: truncate(c.manifest.description || description || c.pkg.name, 120), + description: description || c.pkg.name + }; +} + +async function run({ dryRun, limit }) { + const candidates = await findCandidates(limit); + const week = new Date().toISOString().slice(0, 10); + const data = {}; + const lines = candidates.map((c, i) => { + const id = `c${i + 1}`; + data[id] = candidateInput(c); + const label = data[id].category === 'plugins' ? 'plugin' : data[id].kind; + return `- [ ] **${c.pkg.name}** (${label}) — ${truncate(c.manifest.description || '', 140)} · ⭐ ${c.info.stargazerCount} · ⬇ ${c.downloads}/wk · [repo](${c.source.repo}) · [npm](https://www.npmjs.com/package/${c.pkg.name}) `; + }); + const body = [ + `OpenCode V2 packages on npm that are not in the catalog yet: published since ${V2_RELEASED}, depending on \`@opencode/*\` (plugins on \`@opencode/plugin\`, other tools on the SDK/client), public, licensed, not archived or forked. Ranked by weekly downloads, then stars.`, + '', + '**Tick a box to open a pull request for that candidate** (maintainers only; topics are a keyword guess, fix them in the PR). To stop suggesting a package, add it to [`discovery/declined.txt`](https://github.com/Heretek-AI/awesome-opencode/blob/main/discovery/declined.txt).', + '', + ...(lines.length ? lines : ['_No new candidates this week._']), + '', + `` + ].join('\n'); + + if (dryRun) return console.log(body); + + await ensureLabels(['scout']); + const { data: open } = await rest(`/repos/${REPO}/issues?state=open&labels=scout&per_page=20`); + for (const old of Array.isArray(open) ? open : []) { + if (!old.pull_request) await rest(`/repos/${REPO}/issues/${old.number}`, { method: 'PATCH', body: { state: 'closed', state_reason: 'completed' } }); + } + const res = await rest(`/repos/${REPO}/issues`, { method: 'POST', body: { title: `Scout: V2 candidates (${week})`, body, labels: ['scout'] } }); + console.log(`Opened scout issue #${res.data.number} with ${candidates.length} candidate(s)`); +} + +async function accept({ issueNumber, sender, dryRun }) { + if (sender) { + const { data } = await rest(`/repos/${REPO}/collaborators/${encodeURIComponent(sender)}/permission`); + if (!data || !['admin', 'maintain', 'write'].includes(data.permission)) { + return console.log(`${sender} does not have write access; ignoring`); + } + } + const { data: issue } = await rest(`/repos/${REPO}/issues/${issueNumber}`); + const match = DATA_RE.exec(issue.body || ''); + if (!match) return console.log('no scout data in issue'); + const data = JSON.parse(match[1]); + let body = issue.body; + let opened = 0; + for (const line of body.split('\n')) { + const ticked = line.match(/^- \[x\] .*$/i); + if (!ticked || / → #\d+/.test(line) || opened >= ACCEPT_LIMIT) continue; + const input = data[ticked[1]]; + if (!input) continue; + const result = await buildEntry(input); + let note; + if (!result.ok) { + note = ` → not added: ${result.problems.join('; ').slice(0, 200)}`; + } else { + const pr = await openPullRequest({ + branch: `scout/${result.file.replace(/^data\/[a-z]+\/|\.yaml$/g, '')}`, + files: { [result.file]: result.text }, + title: `docs: add ${input.name} to ${input.category}`, + body: [`Found by the weekly scout in #${issueNumber}.`, '', ...result.notes.map(n => `- ${n}`), '', 'Topics are a keyword guess; adjust them before merging.'].join('\n'), + labels: ['scout', `category: ${input.category}`], + dryRun + }); + note = pr ? ` → #${pr.number}` : ' → (no changes)'; + opened++; + } + body = body.replace(line, line.replace(/ '; + +async function main() { + const argv = process.argv.slice(2); + const number = Number(argv[argv.indexOf('--issue') + 1]); + const dryRun = argv.includes('--dry-run'); + if (!number) throw new Error('usage: submit-entry.js --issue '); + + const { data: issue } = await rest(`/repos/${REPO}/issues/${number}`); + if (!issue || issue.pull_request) throw new Error(`#${number} is not an issue`); + if (issue.state !== 'open') return console.log(`#${number} is closed; nothing to do`); + + const result = await buildEntry(parseIssueForm(issue.body)); + const current = issue.labels.map(l => l.name); + + let pr = null; + if (result.ok) { + pr = await openPullRequest({ + branch: `submission/${number}`, + files: { [result.file]: result.text }, + title: `docs: add ${result.data.name.replace(/[\r\n]+/g, ' ').slice(0, 80)} to ${result.category}`, + body: [ + `Submitted by @${issue.user.login} in #${number}.`, + '', + ...result.notes.map(n => `- ${n}`), + '', + `Closes #${number}` + ].join('\n'), + labels: ['submission', `category: ${result.category}`], + dryRun + }); + } + + const body = result.ok + ? [ + '### ✅ Entry looks good', + '', + pr ? `Opened ${pr.created ? '' : 'and updated '}#${pr.number} with \`${result.file}\`. Edit this issue to change the entry; the PR updates automatically.` : `\`${result.file}\` is ready${dryRun ? ' (dry run)' : '; it already matches the open PR'}.`, + '', + ...result.notes.map(n => `- ${n}`), + '', + '
Generated YAML', + '', + '```yaml', + result.text.trim(), + '```', + '
' + ].join('\n') + : [ + '### ❌ This entry needs changes', + '', + ...result.problems.map(p => `- ${p}`), + ...(result.notes.length ? ['', ...result.notes.map(n => `- ${n}`)] : []), + '', + 'Edit this issue to fix the fields above; the checks run again automatically.' + ].join('\n'); + + console.log(body); + if (dryRun) return; + + const triage = result.ok ? ['ready'] : result.problems.some(p => p.includes('V1 plugin API')) ? ['needs-v2'] : ['needs-metadata']; + await setTriageLabels(number, triage, current); + if (result.category && !current.includes(`category: ${result.category}`)) await addLabels(number, [`category: ${result.category}`]); + await upsertComment(number, MARKER, body); +} + +main().catch(err => { + console.error(err); + process.exit(1); +}); diff --git a/scripts/triage.js b/scripts/triage.js new file mode 100644 index 0000000..827e94b --- /dev/null +++ b/scripts/triage.js @@ -0,0 +1,51 @@ +#!/usr/bin/env node +/** + * Label and comment on a pull request based on the catalog checks. + * Usage: node scripts/triage.js --pr [--dry-run] + * + * Runs from the pull_request_target workflow with the BASE branch checked out: PR files are read + * through the API as data and never executed, so this is safe for fork PRs and gives feedback + * even before a maintainer approves the PR's own workflow runs. + */ + +const { loadCatalog } = require('./utils/catalog'); +const { analyzePullRequest, formatReport } = require('./utils/pr-checks'); +const { REPO, pullChanges, setTriageLabels, addLabels, upsertComment } = require('./utils/repo'); +const { rest } = require('./utils/github'); + +const MARKER = ''; + +async function main() { + const argv = process.argv.slice(2); + const number = Number(argv[argv.indexOf('--pr') + 1]); + const dryRun = argv.includes('--dry-run'); + if (!number) throw new Error('usage: triage.js --pr '); + + const { data: pull } = await rest(`/repos/${REPO}/pulls/${number}`); + if (!pull || !pull.head) throw new Error(`PR #${number} not found`); + + const changes = await pullChanges(pull); + const { entries } = loadCatalog(); + const result = await analyzePullRequest({ changes, baseEntries: entries }); + const report = formatReport(result); + const current = pull.labels.map(l => l.name); + + console.log(report); + console.log('labels:', result.labels.join(', ') || '(none)'); + if (dryRun) return; + + // needs-human is a maintainer gate: the bot may add it but never clears it or marks the PR ready + const labels = current.includes('needs-human') + ? [...new Set([...result.labels.filter(l => l !== 'ready'), 'needs-human'])] + : result.labels; + await setTriageLabels(number, labels, current); + await addLabels(number, result.categories.map(c => `category: ${c}`).filter(l => !current.includes(l))); + if (result.dataChanged || result.errors.length) { + await upsertComment(number, MARKER, report); + } +} + +main().catch(err => { + console.error(err); + process.exit(1); +}); diff --git a/scripts/utils/catalog.js b/scripts/utils/catalog.js new file mode 100644 index 0000000..df25881 --- /dev/null +++ b/scripts/utils/catalog.js @@ -0,0 +1,250 @@ +/** + * Catalog loading and cross-entry rules for awesome-opencode. + * + * Every consumer (validate, generate-readme, export-json, CI checks) loads entries through + * loadCatalog() so a single unparseable file is reported as an error instead of silently + * dropping a whole category. + */ + +const fs = require('fs'); +const path = require('path'); +const yaml = require('js-yaml'); +const { validateEntry } = require('./validation'); +const schema = require('../../data/schema.json'); + +const DATA_DIR = path.join(__dirname, '../../data'); + +// Category processing order (README section order) +const CATEGORIES = ['plugins', 'themes', 'agents', 'projects', 'resources']; + +// Plugins still on the V1 API (compat: v1) are removed from the catalog after this date +const V1_SUNSET = '2027-01-01'; + +const KINDS = schema.properties.kind.enum; +const TOPICS = schema.properties.topics.items.enum; + +// Which kinds may live in which category directory +const CATEGORY_KINDS = { + plugins: ['plugin'], + themes: ['theme'], + agents: ['agent', 'skill'], + projects: ['client', 'tool', 'mcp-server', 'skill', 'agent', 'fork'], + resources: ['guide', 'config', 'mcp-server', 'skill', 'tool'] +}; + +const TOPIC_LABELS = { + memory: 'Memory', + context: 'Context & Tokens', + orchestration: 'Multi-Agent & Orchestration', + workflow: 'Workflows & Planning', + providers: 'Providers, Auth & Routing', + cost: 'Cost & Usage', + notifications: 'Notifications', + sessions: 'Sessions & History', + 'code-quality': 'Code Review & Quality', + security: 'Security & Sandboxing', + git: 'Git & GitHub', + remote: 'Remote & Mobile', + web: 'Web & Browser', + ui: 'UI & TUI', + voice: 'Voice', + media: 'Media & Documents', + docs: 'Docs & Research', + environment: 'Environment & Setup', + observability: 'Observability', + integrations: 'Integrations', + 'code-intel': 'Code Intelligence', + prompting: 'Prompting & Skills', + domain: 'Domain-Specific' +}; + +const KIND_LABELS = { + plugin: 'Plugins', + theme: 'Themes', + agent: 'Agents', + skill: 'Skills', + 'mcp-server': 'MCP Servers', + client: 'Clients & GUIs', + tool: 'Tools & Utilities', + config: 'Configs & Starters', + guide: 'Guides', + fork: 'Forks' +}; + +const FILENAME_RE = /^[a-z0-9]+(?:[-.][a-z0-9]+)*\.yaml$/; + +// Contributor-facing wording for schema pattern failures +const PATTERN_HINTS = { + '/repo': 'repo must be the repository root, e.g. https://github.com/owner/repo (no /tree/ or /blob/ paths, npm pages or websites; use `path` for a folder inside a monorepo)', + '/path': 'path must be a relative folder inside the repo, e.g. packages/my-plugin', + '/npm': 'npm must be a package name, e.g. opencode-my-plugin or @scope/opencode-my-plugin', + '/min_version': 'min_version must be semver, e.g. "2.0.0"' +}; +const MOJIBAKE_RE = /鈥|â€|Ã[\u0080-¿]/; +const PLACEHOLDER_OWNER_RE =/^(your[-_]?(user(name)?|org|name)|user(name)?|owner|example|org|me)$/i; + +/** + * Parse a repo URL into { host, owner, name } (gists return owner/id). + * @param {string} url + * @returns {{host: string, owner: string, name: string}|null} + */ +function parseRepoUrl(url) { + const match = String(url || '').match(/^https?:\/\/([^/]+)\/([^/]+)\/([^/#?]+)/); + if (!match) return null; + return { host: match[1].toLowerCase(), owner: match[2], name: match[3].replace(/\.git$/, '') }; +} + +/** + * Canonical identity of an entry's target: lowercased host/owner/repo plus optional path. + * @param {object} data - Entry data + * @returns {string} + */ +function canonicalKey(data) { + const parsed = parseRepoUrl(data.repo); + const base = parsed + ? `${parsed.host}/${parsed.owner}/${parsed.name}`.toLowerCase() + : String(data.repo || '').toLowerCase().replace(/\/+$/, ''); + const sub = (data.path || '').replace(/^\/+|\/+$/g, '').toLowerCase(); + return sub ? `${base}#${sub}` : base; +} + +/** + * Load every entry in data//*.yaml. + * @param {object} [options] + * @param {string} [options.dataDir] - Override the data directory + * @returns {{entries: object[], errors: {file: string, message: string}[]}} + */ +function loadCatalog({ dataDir = DATA_DIR } = {}) { + const entries = []; + const errors = []; + + for (const category of CATEGORIES) { + const dir = path.join(dataDir, category); + if (!fs.existsSync(dir)) continue; + + for (const fileName of fs.readdirSync(dir).filter(f => f.endsWith('.yaml')).sort()) { + const file = path.join('data', category, fileName); + try { + const data = yaml.load(fs.readFileSync(path.join(dir, fileName), 'utf8')); + if (!data || typeof data !== 'object' || Array.isArray(data)) { + errors.push({ file, message: 'file is empty or not a YAML mapping' }); + continue; + } + entries.push({ category, id: fileName.replace(/\.yaml$/, ''), file, data }); + } catch (err) { + errors.push({ file, message: `invalid YAML: ${err.reason || err.message}` }); + } + } + } + + return { entries, errors }; +} + +/** + * Rules for a single entry: schema, kind/category fit, filename, placeholder repos. + * @param {object} entry - { category, id, file, data } + * @returns {string[]} Error messages + */ +function checkEntry(entry) { + const messages = []; + const result = validateEntry(entry.data, entry.file); + if (!result.valid) { + for (const err of result.errors) { + if (err.keyword === 'pattern' && PATTERN_HINTS[err.path]) { + messages.push(PATTERN_HINTS[err.path]); + continue; + } + const detail = err.keyword === 'additionalProperties' + ? `unknown field "${err.params.additionalProperty}"` + : err.keyword === 'enum' + ? `${err.message}: ${err.params.allowedValues.join(', ')}` + : err.message; + messages.push(`${err.path === '/' ? '' : err.path + ': '}${detail}`); + } + } + + if (!FILENAME_RE.test(path.basename(entry.file))) { + messages.push('filename must be kebab-case, e.g. my-plugin.yaml'); + } + + const allowed = CATEGORY_KINDS[entry.category]; + if (entry.data.kind && allowed && !allowed.includes(entry.data.kind)) { + messages.push(`kind "${entry.data.kind}" does not belong in data/${entry.category}/ (allowed: ${allowed.join(', ')})`); + } + + if (entry.category === 'plugins' && !entry.data.compat) { + messages.push('plugins must declare compat (v2, v1 or unknown); CI verifies it'); + } + + for (const field of ['name', 'tagline', 'description']) { + if (MOJIBAKE_RE.test(entry.data[field] || '')) { + messages.push(`${field} contains mis-encoded characters (e.g. "鈥?" or "—" instead of "—"); re-save the file as UTF-8`); + } + } + + const parsed = parseRepoUrl(entry.data.repo); + if (parsed && PLACEHOLDER_OWNER_RE.test(parsed.owner)) { + messages.push(`repo owner "${parsed.owner}" looks like a placeholder`); + } + + return messages; +} + +/** + * Validate the whole catalog: per-entry rules plus cross-entry uniqueness. + * @param {object[]} entries + * @returns {{file: string, message: string}[]} + */ +function checkCatalog(entries) { + const problems = []; + const byKey = new Map(); + + for (const entry of entries) { + for (const message of checkEntry(entry)) { + problems.push({ file: entry.file, message }); + } + if (!entry.data.repo) continue; + const key = canonicalKey(entry.data); + if (byKey.has(key)) { + problems.push({ + file: entry.file, + message: `duplicate of ${byKey.get(key)} (same repo${entry.data.path ? ' and path' : ''}); use \`path\` for separate packages in one monorepo` + }); + } else { + byKey.set(key, entry.file); + } + } + + return problems; +} + +/** + * Format problems for terminal output. + * @param {{file: string, message: string}[]} problems + * @returns {string} + */ +function formatProblems(problems) { + const byFile = new Map(); + for (const { file, message } of problems) { + if (!byFile.has(file)) byFile.set(file, []); + byFile.get(file).push(message); + } + return [...byFile].map(([file, messages]) => `✗ ${file}\n${messages.map(m => ` - ${m}`).join('\n')}`).join('\n'); +} + +module.exports = { + CATEGORIES, + CATEGORY_KINDS, + DATA_DIR, + KINDS, + KIND_LABELS, + TOPICS, + TOPIC_LABELS, + V1_SUNSET, + canonicalKey, + checkCatalog, + checkEntry, + formatProblems, + loadCatalog, + parseRepoUrl +}; diff --git a/scripts/utils/compat.js b/scripts/utils/compat.js new file mode 100644 index 0000000..dd12c10 --- /dev/null +++ b/scripts/utils/compat.js @@ -0,0 +1,265 @@ +/** + * OpenCode V1/V2 compatibility probe. + * + * V2 marker: any dependency on an @opencode/* package (@opencode/plugin, client, sdk, theme, core), + * including npm aliases like "plugin-v2": "npm:@opencode/plugin@2.0.14". The V2 API also shipped as + * pre-releases under the old name before the rename (@opencode-ai/plugin@0.0.0-beta-*, @next, @beta, + * and @opencode-ai/client, which only exists in the V2 era); those count as V2 too. Packages that + * depend on both generations are dual-support and count as V2. + * V1 marker: @opencode-ai/plugin or @opencode-ai/sdk at a 1.x (or unpinned) version, with no V2 marker. + * + * Sources, in order: the entry's npm package (latest version), then package.json files in the repo + * (at `path`, the root, and workspace packages under packages/ or plugins/), then source text for + * gists. Anything else is "unknown" and needs a human look. + */ + +const zlib = require('zlib'); +const { getFiles, getNpmLatest, getToken, rest } = require('./github'); +const { parseRepoUrl } = require('./catalog'); + +const SOURCE_FILE_RE = /\.(m?[jt]sx?|cjs|cts)$/; +const SKIP_DIR_RE = /(^|\/)(node_modules|\.git|vendor|fixtures?|__tests__|test|tests|examples?)\//; +const MAX_TARBALL_BYTES = 30 * 1024 * 1024; +// Legacy V1 plugin shape: an exported async function receiving { client, project, directory, $, ... } +// and returning hooks such as event, chat.params or tool.execute.before +const V1_HOOK_RE = /["']?(chat\.params|chat\.message|tool\.execute\.(before|after)|permission\.ask|shell\.env)["']?\s*:\s*async|\bevent\s*:\s*async\s*\(\s*\{\s*event\b/; +// V2 plugin contract without the helper: an object with an id and a setup(ctx) entry point +// (Plugin.define is an identity function, so dependency-free V2 plugins export this directly) +const V2_OBJECT_RE = /\{[^{}]*\bid\s*:\s*[\w"'`][^{}]*\b(async\s+)?setup\s*[:,(}]/; +const V1_EXPORT_RE = /export\s+(const|default)\s+(\w+\s*(:\s*Plugin\s*)?=\s*)?async\s*(function\s*\w*\s*)?\(\s*\{[^}]*\b(client|project|directory|worktree|\$)\b/; + +const DEP_FIELDS = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']; +const V1_PACKAGES = ['@opencode-ai/plugin', '@opencode-ai/sdk']; +const V2_ERA_PACKAGES = ['@opencode-ai/client']; +const V2_PRERELEASE_SPEC = /^(?:[\^~]|>=?\s*)?(?:0\.0\.0-(?:beta|next|tui-v2)|beta$|next$)/; +const WORKSPACE_DIRS = ['packages', 'plugins']; +const MAX_WORKSPACE_PACKAGES = 25; + +/** + * Resolve each dependency (key or npm: alias target) to the real package name and version spec. + * @param {object} manifest - package.json contents + * @returns {{name: string, spec: string}[]} + */ +function dependencies(manifest) { + const deps = []; + for (const field of DEP_FIELDS) { + for (const [key, raw] of Object.entries((manifest && manifest[field]) || {})) { + const spec = typeof raw === 'string' ? raw : ''; + const alias = spec.match(/^npm:((?:@[^/@]+\/)?[^@]+)(?:@(.*))?$/); + deps.push(alias ? { name: alias[1], spec: alias[2] || '' } : { name: key, spec }); + } + } + return deps; +} + +/** + * Markers found in one manifest. + * @param {object} manifest + * @returns {{v2: string[], v1: string[]}} + */ +function manifestMarkers(manifest) { + const v2 = new Set(); + const v1 = new Set(); + for (const { name, spec } of dependencies(manifest)) { + if (name.startsWith('@opencode/')) v2.add(name); + else if (V2_ERA_PACKAGES.includes(name)) v2.add(`${name} (V2 pre-release)`); + else if (V1_PACKAGES.includes(name) && V2_PRERELEASE_SPEC.test(spec.trim())) v2.add(`${name}@${spec} (V2 pre-release)`); + else if (V1_PACKAGES.includes(name)) v1.add(spec ? `${name}@${spec}` : name); + } + return { v2: [...v2], v1: [...v1] }; +} + +/** + * Markers found in source text (import/require specifiers). + * @param {string} text + * @returns {{v2: string[], v1: string[], define: boolean}} + */ +function sourceMarkers(text) { + const specs = [...String(text).matchAll(/(?:from\s+|require\(\s*|import\(\s*)["'](@opencode(?:-ai)?\/[a-z0-9-]+)/g)].map(m => m[1]); + return { + v2: [...new Set(specs.filter(s => s.startsWith('@opencode/')))], + v1: [...new Set(specs.filter(s => V1_PACKAGES.includes(s)))], + define: /Plugin\.define\s*\(/.test(text), + v2Signature: V2_OBJECT_RE.test(text), + v1Signature: V1_HOOK_RE.test(text) || V1_EXPORT_RE.test(text) + }; +} + +/** + * Turn collected markers into a verdict. + * @param {{source: string, v2: string[], v1: string[]}[]} findings + * @returns {{compat: 'v2'|'v1'|'unknown', evidence: string[]}} + */ +function verdict(findings) { + const evidence = findings + .filter(f => f.v2.length || f.v1.length) + .map(f => `${f.source}: ${[...f.v2, ...f.v1].join(', ')}`); + const hasV2 = findings.some(f => f.v2.length); + const hasV1 = findings.some(f => f.v1.length); + if (hasV2) return { compat: 'v2', evidence: hasV1 ? [...evidence, 'dual V1/V2 support'] : evidence }; + if (hasV1) return { compat: 'v1', evidence }; + return { compat: 'unknown', evidence: findings.length ? [`no @opencode/* or @opencode-ai/* dependency in ${findings.map(f => f.source).join(', ')}`] : ['no package.json or npm package found'] }; +} + +function safeJson(text) { + try { return JSON.parse(text); } catch { return null; } +} + +/** + * Iterate regular files in a tar archive buffer. + * @param {Buffer} tar + * @returns {Generator<{name: string, data: Buffer}>} + */ +function* tarFiles(tar) { + let offset = 0; + let longName = null; + while (offset + 512 <= tar.length) { + const header = tar.subarray(offset, offset + 512); + if (header.every(b => b === 0)) break; + const field = (start, len) => header.subarray(start, start + len).toString('utf8').replace(/\0.*$/s, ''); + const size = parseInt(field(124, 12).trim() || '0', 8); + const type = String.fromCharCode(header[156] || 48); + const prefix = field(345, 155); + let name = longName || (prefix ? `${prefix}/${field(0, 100)}` : field(0, 100)); + const data = tar.subarray(offset + 512, offset + 512 + size); + longName = null; + if (type === 'L') longName = data.toString('utf8').replace(/\0.*$/s, ''); + else if (type === 'x') { + const pathRecord = data.toString('utf8').match(/\d+ path=([^\n]+)\n/); + if (pathRecord) longName = pathRecord[1]; + } else if (type === '0' || type === '\0') { + name = name.replace(/^[^/]+\//, ''); // strip the "owner-repo-sha/" top folder + yield { name, data }; + } + offset += 512 + Math.ceil(size / 512) * 512; + } +} + +/** + * Scan a GitHub repo's source for V1/V2 markers by downloading its tarball. + * @param {{owner: string, name: string}} repo + * @param {string} [subPath] - restrict to a monorepo folder + * @returns {Promise<{source: string, v2: string[], v1: string[]}|null>} + */ +async function scanSource(repo, subPath) { + const res = await fetch(`https://api.github.com/repos/${repo.owner}/${repo.name}/tarball`, { + headers: { 'User-Agent': 'awesome-opencode-bot', ...(getToken() ? { Authorization: `Bearer ${getToken()}` } : {}) }, + redirect: 'follow' + }).catch(() => null); + if (!res || !res.ok) return null; + const gz = Buffer.from(await res.arrayBuffer()); + if (gz.length > MAX_TARBALL_BYTES) return null; + let tar; + try { tar = zlib.gunzipSync(gz); } catch { return null; } + + const v2 = new Set(); + const v1 = new Set(); + let define = false; + let v1Signature = false; + let v2Signature = false; + let scanned = 0; + const prefix = subPath ? `${subPath.replace(/\/+$/, '')}/` : ''; + for (const file of tarFiles(tar)) { + if (!file.name.startsWith(prefix) || !SOURCE_FILE_RE.test(file.name) || SKIP_DIR_RE.test(file.name) || file.data.length > 2 * 1024 * 1024) continue; + scanned++; + const markers = sourceMarkers(file.data.toString('utf8')); + markers.v2.forEach(m => v2.add(m)); + markers.v1.forEach(m => v1.add(m)); + define = define || markers.define; + v1Signature = v1Signature || markers.v1Signature; + v2Signature = v2Signature || markers.v2Signature; + } + // Plugin.define / an { id, setup } export is the V2 entry point; a bare V1 import without it is a V1 plugin + if (define && v2.size === 0) v2.add('Plugin.define'); + if (!define && v2Signature && v2.size === 0) v2.add('V2 plugin object (id + setup)'); + define = define || v2Signature; + if (define && v1.size) return { source: 'source', v2: [...v2, ...[...v1].map(m => `${m} (with Plugin.define)`)], v1: [] }; + return { source: `source (${scanned} files)`, v2: [...v2], v1: [...v1], scanned, define, v1Signature }; +} + +/** + * Probe many entries at once. Network calls are batched. + * @param {{key: string, repo: string, path?: string, npm?: string, plugin?: boolean}[]} targets + * plugin: true lets a legacy V1 hook signature in source (without Plugin.define) count as V1 + * @param {object} [options] + * @param {boolean} [options.deep=true] - for still-unknown GitHub repos, download the tarball and scan source + * @returns {Promise>} + */ +async function probeCompat(targets, { deep = true } = {}) { + const findings = new Map(targets.map(t => [t.key, []])); + + // 1. npm packages + await Promise.all(targets.filter(t => t.npm).map(async t => { + try { + const doc = await getNpmLatest(t.npm); + if (doc) findings.get(t.key).push({ source: `npm ${t.npm}@${doc.version}`, ...manifestMarkers(doc) }); + } catch { /* registry hiccup: fall through to repo sources */ } + })); + + // 2. package.json files in GitHub repos + const github = targets + .map(t => ({ t, parsed: parseRepoUrl(t.repo) })) + .filter(({ parsed }) => parsed && parsed.host === 'github.com'); + + const firstRound = []; + for (const { t, parsed } of github) { + const base = t.path ? `${t.path.replace(/\/+$/, '')}/` : ''; + firstRound.push({ key: t.key, owner: parsed.owner, name: parsed.name, path: `${base}package.json` }); + if (!t.path) { + for (const dir of WORKSPACE_DIRS) firstRound.push({ key: t.key, owner: parsed.owner, name: parsed.name, path: dir, tree: true }); + } + } + const files = await getFiles(firstRound); + + const secondRound = []; + for (const req of firstRound) { + const obj = files.get(`${req.owner}/${req.name}:${req.path}`); + if (!obj) continue; + if (req.tree) { + (obj.entries || []).filter(e => e.type === 'tree').slice(0, MAX_WORKSPACE_PACKAGES).forEach(e => { + secondRound.push({ key: req.key, owner: req.owner, name: req.name, path: `${req.path}/${e.name}/package.json` }); + }); + } else if (obj.text) { + const manifest = safeJson(obj.text); + if (manifest) findings.get(req.key).push({ source: req.path, ...manifestMarkers(manifest) }); + } + } + const workspaceFiles = await getFiles(secondRound); + for (const req of secondRound) { + const obj = workspaceFiles.get(`${req.owner}/${req.name}:${req.path}`); + const manifest = obj && obj.text && safeJson(obj.text); + if (manifest) findings.get(req.key).push({ source: req.path, ...manifestMarkers(manifest) }); + } + + // 3. Gists: read the source files directly + for (const t of targets) { + const gist = String(t.repo).match(/^https:\/\/gist\.github\.com\/[^/]+\/([0-9a-f]+)/); + if (!gist) continue; + const { status, data } = await rest(`/gists/${gist[1]}`); + if (status !== 200 || !data || !data.files) continue; + for (const [name, file] of Object.entries(data.files)) { + const markers = name === 'package.json' ? manifestMarkers(safeJson(file.content) || {}) : sourceMarkers(file.content || ''); + findings.get(t.key).push({ source: `gist ${name}`, v2: markers.v2, v1: markers.v1 }); + } + } + + // 4. Deep scan of source for anything not yet confirmed V2 (a V1 types dependency can sit next to a + // dependency-free V2 setup export, so V1 verdicts are re-checked too) + if (deep) { + for (const { t, parsed } of github) { + if (verdict(findings.get(t.key)).compat === 'v2') continue; + const scanned = await scanSource(parsed, t.path); + if (!scanned) continue; + if (t.plugin && !scanned.v2.length && !scanned.v1.length && scanned.v1Signature && verdict(findings.get(t.key)).compat === 'unknown') { + scanned.v1 = ['legacy V1 plugin function/hooks without Plugin.define']; + } + findings.get(t.key).push(scanned); + } + } + + const results = new Map(); + for (const t of targets) results.set(t.key, verdict(findings.get(t.key))); + return results; +} + +module.exports = { dependencies, manifestMarkers, probeCompat, scanSource, sourceMarkers, tarFiles, verdict }; diff --git a/scripts/utils/format.js b/scripts/utils/format.js new file mode 100644 index 0000000..c59d617 --- /dev/null +++ b/scripts/utils/format.js @@ -0,0 +1,46 @@ +/** + * Canonical YAML formatting for catalog entries. + * + * All bot-written and scaffolded entries go through dumpEntry() so quoting is always valid YAML + * (unquoted ": " in a tagline broke README generation for every entry before this existed). + */ + +const yaml = require('js-yaml'); + +const KEY_ORDER = [ + 'name', 'repo', 'path', 'npm', 'homepage', 'tagline', 'description', + 'kind', 'also', 'topics', 'compat', 'scope', 'tags', 'min_version', 'installation' +]; + +/** + * Order keys canonically; unknown keys are kept at the end so validation can report them. + * @param {object} data + * @returns {object} + */ +function orderEntry(data) { + const ordered = {}; + for (const key of KEY_ORDER) { + if (data[key] !== undefined && data[key] !== null && !(Array.isArray(data[key]) && data[key].length === 0)) { + ordered[key] = data[key]; + } + } + for (const key of Object.keys(data)) { + if (!(key in ordered) && !KEY_ORDER.includes(key) && !key.startsWith('_')) ordered[key] = data[key]; + } + return ordered; +} + +/** + * Serialize an entry to YAML text. + * @param {object} data + * @returns {string} + */ +function dumpEntry(data) { + const clean = orderEntry(data); + for (const key of ['name', 'tagline', 'description']) { + if (typeof clean[key] === 'string') clean[key] = clean[key].trim(); + } + return yaml.dump(clean, { lineWidth: -1, noRefs: true, quotingType: '"' }); +} + +module.exports = { KEY_ORDER, dumpEntry, orderEntry }; diff --git a/scripts/utils/git-pr.js b/scripts/utils/git-pr.js new file mode 100644 index 0000000..9c29338 --- /dev/null +++ b/scripts/utils/git-pr.js @@ -0,0 +1,75 @@ +/** + * Open or update a bot pull request from file changes (used by submissions, scout, health). + * + * GitHub holds pull_request workflow runs for bot-opened PRs as action_required; the bot approves the + * "validate" run on its own head commit so the PR gets the required check. + */ + +const fs = require('fs'); +const path = require('path'); +const { execFileSync } = require('child_process'); +const { rest } = require('./github'); +const { REPO, addLabels, approvePendingRuns } = require('./repo'); + +const ROOT = path.join(__dirname, '../..'); +const BOT = ['-c', 'user.name=github-actions[bot]', '-c', 'user.email=41898282+github-actions[bot]@users.noreply.github.com']; + +const git = (...args) => execFileSync('git', args, { cwd: ROOT, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }).trim(); + +/** + * @param {object} options + * @param {string} options.branch - e.g. "submission/123" + * @param {Object} options.files - repo-relative path -> new content (null deletes) + * @param {string} options.title + * @param {string} options.body + * @param {string[]} [options.labels] + * @param {string} [options.base="main"] + * @param {boolean} [options.dryRun] + * @returns {Promise<{number: number, url: string, created: boolean}|null>} null when there is nothing to change + */ +async function openPullRequest({ branch, files, title, body, labels = [], base = 'main', dryRun = false }) { + if (!/^[a-z0-9][a-z0-9/_.-]*$/i.test(branch)) throw new Error(`unsafe branch name: ${branch}`); + const original = git('rev-parse', '--abbrev-ref', 'HEAD'); + git('fetch', '--quiet', 'origin', base); + git('checkout', '--quiet', '-B', branch, `origin/${base}`); + try { + for (const [file, content] of Object.entries(files)) { + const target = path.join(ROOT, file); + if (!target.startsWith(path.join(ROOT, 'data') + path.sep)) throw new Error(`refusing to write outside data/: ${file}`); + if (content === null) { + if (fs.existsSync(target)) git('rm', '--quiet', '--', file); + } else { + fs.mkdirSync(path.dirname(target), { recursive: true }); + fs.writeFileSync(target, content); + git('add', '--', file); + } + } + if (!git('diff', '--cached', '--name-only')) return null; + if (dryRun) { + console.log(`[dry run] would push ${branch}: ${git('diff', '--cached', '--stat')}`); + return null; + } + git(...BOT, 'commit', '--quiet', '-m', title); + git('push', '--quiet', '--force', 'origin', `HEAD:refs/heads/${branch}`); + } finally { + git('checkout', '--quiet', '--force', original === 'HEAD' ? `origin/${base}` : original); + } + + const owner = REPO.split('/')[0]; + const { data: existing } = await rest(`/repos/${REPO}/pulls?state=open&head=${owner}:${encodeURIComponent(branch)}`); + let pr; + let created = false; + if (Array.isArray(existing) && existing.length) { + ({ data: pr } = await rest(`/repos/${REPO}/pulls/${existing[0].number}`, { method: 'PATCH', body: { title, body } })); + } else { + const res = await rest(`/repos/${REPO}/pulls`, { method: 'POST', body: { title, body, head: branch, base } }); + if (res.status >= 300) throw new Error(`create PR for ${branch}: HTTP ${res.status} ${JSON.stringify(res.data).slice(0, 300)}`); + pr = res.data; + created = true; + } + if (labels.length) await addLabels(pr.number, labels); + await approvePendingRuns(pr.head.sha); + return { number: pr.number, url: pr.html_url, created }; +} + +module.exports = { openPullRequest }; diff --git a/scripts/utils/github.js b/scripts/utils/github.js new file mode 100644 index 0000000..d639629 --- /dev/null +++ b/scripts/utils/github.js @@ -0,0 +1,182 @@ +/** + * Minimal GitHub and npm API helpers (Node 20+ global fetch, no extra dependencies). + * + * Auth: GITHUB_TOKEN or GH_TOKEN, falling back to `gh auth token` for local runs. + */ + +const { execFileSync } = require('child_process'); + +let cachedToken; + +function getToken() { + if (cachedToken !== undefined) return cachedToken; + cachedToken = process.env.GITHUB_TOKEN || process.env.GH_TOKEN || ''; + if (!cachedToken) { + try { + cachedToken = execFileSync('gh', ['auth', 'token'], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim(); + } catch { + cachedToken = ''; + } + } + return cachedToken; +} + +function headers(extra = {}) { + const token = getToken(); + return { + 'User-Agent': 'awesome-opencode-bot', + Accept: 'application/vnd.github+json', + ...(token ? { Authorization: `Bearer ${token}` } : {}), + ...extra + }; +} + +// The only hosts these scripts talk to +const ALLOWED_HOSTS = new Set(['api.github.com', 'registry.npmjs.org', 'api.npmjs.org']); + +async function fetchWithRetry(rawUrl, options = {}, attempts = 5) { + const url = new URL(rawUrl); + if (url.protocol !== 'https:' || !ALLOWED_HOSTS.has(url.hostname) || url.pathname.split('/').some(s => s === '..' || s === '.')) { + throw new Error(`refusing to fetch ${rawUrl}`); + } + for (let attempt = 1; ; attempt++) { + try { + const res = await fetch(url, options); + if ([429, 502, 503, 504].includes(res.status) && attempt < attempts) { + const retryAfter = Number(res.headers.get('retry-after')); + await new Promise(r => setTimeout(r, (retryAfter > 0 ? retryAfter : 2 ** attempt) * 1000)); + continue; + } + return res; + } catch (err) { + if (attempt >= attempts) throw err; + await new Promise(r => setTimeout(r, 1000 * attempt)); + } + } +} + +/** + * Run a GraphQL query. Partial data is returned even when some aliases error (e.g. repo not found). + * @param {string} query + * @param {object} [variables] + * @returns {Promise} data + */ +async function graphql(query, variables = {}) { + const res = await fetchWithRetry('https://api.github.com/graphql', { + method: 'POST', + headers: headers({ 'Content-Type': 'application/json' }), + body: JSON.stringify({ query, variables }) + }); + const body = await res.json().catch(() => ({})); + if (!res.ok && !body.data) { + throw new Error(`GitHub GraphQL ${res.status}: ${body.message || JSON.stringify(body.errors || body)}`); + } + const fatal = (body.errors || []).filter(e => e.type !== 'NOT_FOUND' && e.type !== 'FORBIDDEN'); + if (!body.data && fatal.length) { + throw new Error(`GitHub GraphQL error: ${fatal.map(e => e.message).join('; ')}`); + } + return body.data || {}; +} + +/** + * GitHub REST request. + * @param {string} route - e.g. "/repos/o/r" or a full URL + * @param {object} [options] - { method, body } + * @returns {Promise<{status: number, data: any}>} + */ +async function rest(route, { method = 'GET', body } = {}) { + const url = route.startsWith('http') ? route : `https://api.github.com${route}`; + if (!url.startsWith('https://api.github.com/') || /\/\.{1,2}(\/|\?|$)/.test(url.split('?')[0])) { + throw new Error(`refusing to call ${url}`); + } + const res = await fetchWithRetry(url, { + method, + headers: headers(body ? { 'Content-Type': 'application/json' } : {}), + body: body ? JSON.stringify(body) : undefined + }); + const text = await res.text(); + let data = text; + try { data = text ? JSON.parse(text) : null; } catch { /* non-JSON body */ } + return { status: res.status, data }; +} + +const gqlString = s => JSON.stringify(String(s)); + +/** + * Fetch repository metadata for many repos in batched GraphQL queries. + * @param {{owner: string, name: string}[]} repos + * @returns {Promise>} keyed by "owner/name" (as given); null when not found + */ +async function getRepos(repos, { batchSize = 60 } = {}) { + const result = new Map(); + const unique = [...new Map(repos.map(r => [`${r.owner}/${r.name}`, r])).values()]; + for (let i = 0; i < unique.length; i += batchSize) { + const chunk = unique.slice(i, i + batchSize); + const fields = chunk.map((r, j) => `r${j}: repository(owner: ${gqlString(r.owner)}, name: ${gqlString(r.name)}) { + nameWithOwner url isArchived isFork isPrivate pushedAt stargazerCount description + licenseInfo { spdxId } defaultBranchRef { name } + }`).join('\n'); + const data = await graphql(`query { ${fields} }`); + chunk.forEach((r, j) => result.set(`${r.owner}/${r.name}`, data[`r${j}`] || null)); + } + return result; +} + +/** + * Read text files from repos at HEAD in batched GraphQL queries. + * @param {{owner: string, name: string, path: string}[]} requests + * @returns {Promise>} + * keyed by "owner/name:path"; tree paths return entries + */ +async function getFiles(requests, { batchSize = 60 } = {}) { + const result = new Map(); + for (let i = 0; i < requests.length; i += batchSize) { + const chunk = requests.slice(i, i + batchSize); + const fields = chunk.map((r, j) => `f${j}: repository(owner: ${gqlString(r.owner)}, name: ${gqlString(r.name)}) { + object(expression: ${gqlString(`HEAD:${r.path}`)}) { + ... on Blob { text isTruncated } + ... on Tree { entries { name type } } + } + }`).join('\n'); + const data = await graphql(`query { ${fields} }`); + chunk.forEach((r, j) => { + const obj = data[`f${j}`] && data[`f${j}`].object; + result.set(`${r.owner}/${r.name}:${r.path}`, obj || null); + }); + } + return result; +} + +/** + * Fetch the latest published version document of an npm package. + * @param {string} pkg + * @returns {Promise} null when the package does not exist + */ +const NPM_NAME_RE = /^(@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/; + +async function getNpmLatest(pkg) { + if (!NPM_NAME_RE.test(pkg)) return null; + const res = await fetchWithRetry(`https://registry.npmjs.org/${pkg.replace(/\//g, '%2F')}/latest`, { + headers: { 'User-Agent': 'awesome-opencode-bot', Accept: 'application/json' } + }); + if (res.status === 404) return null; + if (!res.ok) throw new Error(`npm registry ${res.status} for ${pkg}`); + return res.json(); +} + +/** + * Weekly downloads for an npm package (0 when unknown). + * @param {string} pkg + * @returns {Promise} + */ +async function getNpmWeeklyDownloads(pkg) { + if (!NPM_NAME_RE.test(pkg)) return 0; + const res = await fetchWithRetry(`https://api.npmjs.org/downloads/point/last-week/${pkg}`, { + headers: { 'User-Agent': 'awesome-opencode-bot' } + }); + if (!res.ok) return 0; + const body = await res.json().catch(() => ({})); + return body.downloads || 0; +} + +module.exports = { getFiles, getNpmLatest, getNpmWeeklyDownloads, getRepos, getToken, graphql, rest }; diff --git a/scripts/utils/history.js b/scripts/utils/history.js new file mode 100644 index 0000000..2334813 --- /dev/null +++ b/scripts/utils/history.js @@ -0,0 +1,33 @@ +/** + * Git history helpers. Requires a full clone (actions/checkout with fetch-depth: 0); + * in a shallow clone every file looks like it was added in the oldest fetched commit. + */ + +const { execFileSync } = require('child_process'); +const path = require('path'); + +const ROOT = path.join(__dirname, '../..'); + +/** + * Date each data file was first added, newest commits first. + * @returns {Map} "data/plugins/x.yaml" -> ISO date; empty when git is unavailable + */ +function addedDates() { + const dates = new Map(); + let out = ''; + try { + out = execFileSync('git', ['log', '--diff-filter=A', '--name-only', '--format=@%cI', '--', 'data/'], { + cwd: ROOT, encoding: 'utf8', maxBuffer: 64 * 1024 * 1024, stdio: ['ignore', 'pipe', 'ignore'] + }); + } catch { + return dates; + } + let current = null; + for (const line of out.split('\n')) { + if (line.startsWith('@')) current = line.slice(1); + else if (line.endsWith('.yaml') && current && !dates.has(line)) dates.set(line, current); + } + return dates; +} + +module.exports = { addedDates }; diff --git a/scripts/utils/pr-checks.js b/scripts/utils/pr-checks.js new file mode 100644 index 0000000..f03950d --- /dev/null +++ b/scripts/utils/pr-checks.js @@ -0,0 +1,168 @@ +/** + * Pull request analysis shared by: + * - scripts/check-pr.js (the required "validate" check; runs the PR's own code) + * - scripts/triage.js (pull_request_target; trusted base code, PR files read via the API) + * - scripts/reprobe.js (nightly re-check of PRs held for V2 migration) + */ + +const path = require('path'); +const yaml = require('js-yaml'); +const { CATEGORIES, canonicalKey, checkCatalog, parseRepoUrl } = require('./catalog'); +const { probeCompat } = require('./compat'); +const { getRepos } = require('./github'); +const { escapeCell } = require('./template'); + +// Generated files a PR must never edit by hand +const GENERATED_FILES = ['README.md', 'dist/registry.json']; +const DATA_FILE_RE = new RegExp(`^data/(${CATEGORIES.join('|')})/[^/]+\\.yaml$`); + +const LABELS = { + needsV2: 'needs-v2', + needsMetadata: 'needs-metadata', + needsHuman: 'needs-human', + ready: 'ready' +}; + +/** + * Analyze a PR's changes. + * @param {object} input + * @param {{path: string, status: string, content?: string, baseContent?: string}[]} input.changes + * status is one of added | modified | removed | renamed; content is the new file text for data files + * @param {object[]} input.baseEntries - catalog entries on the base branch (from loadCatalog) + * @param {boolean} [input.probe=true] - run the network V2 probe for plugin entries + * @returns {Promise<{errors: object[], warnings: object[], entries: object[], labels: string[], categories: string[], dataChanged: boolean}>} + */ +async function analyzePullRequest({ changes, baseEntries, probe = true }) { + const errors = []; + const warnings = []; + + for (const change of changes) { + if (GENERATED_FILES.includes(change.path) && change.status !== 'removed') { + errors.push({ + file: change.path, + kind: 'metadata', + message: `${change.path} is generated from data/ and must not be edited by hand. Add or edit data//.yaml instead (see contributing.md, or use the "Add an entry" issue form).` + }); + } + } + + // Overlay the PR's data changes onto the base catalog + const head = new Map(baseEntries.map(e => [e.file, e])); + const changed = []; + const retargeted = []; + for (const change of changes.filter(c => DATA_FILE_RE.test(c.path))) { + head.delete(change.path); + if (change.status === 'removed') continue; + const [, category, fileName] = change.path.split('/'); + let data; + try { + data = yaml.load(change.content || ''); + } catch (err) { + errors.push({ file: change.path, kind: 'metadata', message: `invalid YAML: ${err.reason || err.message}. Quote values that contain ": " (e.g. tagline: "A: B").` }); + continue; + } + if (!data || typeof data !== 'object' || Array.isArray(data)) { + errors.push({ file: change.path, kind: 'metadata', message: 'file is empty or not a YAML mapping' }); + continue; + } + const entry = { category, id: fileName.replace(/\.yaml$/, ''), file: change.path, data, status: change.status }; + head.set(change.path, entry); + changed.push(entry); + + if (change.status === 'modified' && change.baseContent) { + try { + const before = yaml.load(change.baseContent); + // Adding or changing `path` within the same repo is not a new target + if (before && before.repo && data.repo && canonicalKey({ repo: before.repo }) !== canonicalKey({ repo: data.repo })) { + retargeted.push({ file: change.path, from: before.repo, to: data.repo }); + } + } catch { /* base file was already broken */ } + } + } + + // A changed repo URL is fine when GitHub redirects the old name to the new one (rename/transfer) + if (retargeted.length) { + const olds = retargeted.map(r => parseRepoUrl(r.from)).filter(p => p && p.host === 'github.com'); + const resolved = probe ? await getRepos(olds.map(p => ({ owner: p.owner, name: p.name }))).catch(() => new Map()) : new Map(); + for (const r of retargeted) { + const old = parseRepoUrl(r.from); + const info = old && resolved.get(`${old.owner}/${old.name}`); + if (info && canonicalKey({ repo: `https://github.com/${info.nameWithOwner}` }) === canonicalKey({ repo: r.to })) continue; + warnings.push({ file: r.file, kind: 'human', message: `changes this entry's target from ${r.from} to ${r.to}. If this is a different project, add a new file instead of reusing an existing filename.` }); + } + } + + // YAML files outside data// + for (const change of changes) { + if (change.path.startsWith('data/') && change.path.endsWith('.yaml') && !DATA_FILE_RE.test(change.path) && !change.path.startsWith('data/examples/') && change.status !== 'removed') { + errors.push({ file: change.path, kind: 'metadata', message: `entries must live in data//.yaml where category is one of: ${CATEGORIES.join(', ')}` }); + } + if (change.path.startsWith('data/') && !change.path.endsWith('.yaml') && !change.path.endsWith('.json') && !change.path.endsWith('.md') && change.status !== 'removed') { + errors.push({ file: change.path, kind: 'metadata', message: 'entry files must use the .yaml extension' }); + } + } + + // Schema and cross-entry rules, reported for the files this PR touches + const touched = new Set(changed.map(e => e.file)); + for (const problem of checkCatalog([...head.values()])) { + if (touched.has(problem.file) || [...touched].some(f => problem.message.includes(f))) { + errors.push({ ...problem, kind: 'metadata' }); + } + } + + // V2 compatibility for plugin entries + const plugins = changed.filter(e => e.category === 'plugins' && e.data.repo); + if (probe && plugins.length) { + const results = await probeCompat(plugins.map(e => ({ key: e.file, repo: e.data.repo, path: e.data.path, npm: e.data.npm, plugin: true }))); + for (const entry of plugins) { + const { compat, evidence } = results.get(entry.file); + entry.probe = { compat, evidence }; + const detail = evidence.length ? ` (${evidence.join('; ')})` : ''; + if (compat === 'v1' && entry.status === 'added') { + errors.push({ file: entry.file, kind: 'v2', message: `targets the legacy V1 plugin API${detail}. New plugins must be built on OpenCode V2: depend on @opencode/plugin and export Plugin.define({ id, setup(ctx) }). This PR is re-checked nightly and unblocks itself once the repo is migrated.` }); + } else if (compat !== 'unknown' && entry.data.compat && entry.data.compat !== compat) { + errors.push({ file: entry.file, kind: compat === 'v1' ? 'v2' : 'metadata', message: `declares compat: ${entry.data.compat} but the package was detected as ${compat}${detail}. Set compat: ${compat}.` }); + } else if (compat === 'unknown') { + warnings.push({ file: entry.file, kind: 'human', message: `could not verify V2 compatibility automatically${detail}. Set \`npm\` (package name) or \`path\` (monorepo folder) so the check can find package.json; otherwise a maintainer will verify by hand.` }); + } + } + } + + const categories = [...new Set(changes.filter(c => DATA_FILE_RE.test(c.path)).map(c => c.path.split('/')[1]))]; + const labels = []; + if (errors.some(e => e.kind === 'v2')) labels.push(LABELS.needsV2); + if (errors.some(e => e.kind === 'metadata')) labels.push(LABELS.needsMetadata); + if (warnings.length) labels.push(LABELS.needsHuman); + if (!errors.length && !warnings.length && changed.length) labels.push(LABELS.ready); + + return { errors, warnings, entries: changed, labels, categories, dataChanged: categories.length > 0 }; +} + +/** + * Markdown report for a job summary or PR comment. + * @param {object} result - analyzePullRequest() result + * @returns {string} + */ +function formatReport(result) { + const lines = []; + if (!result.dataChanged && !result.errors.length) { + return '✅ No catalog entries changed.'; + } + lines.push(result.errors.length ? '### ❌ Catalog checks failed' : result.warnings.length ? '### ⚠️ Catalog checks passed with notes' : '### ✅ Catalog checks passed'); + const section = (title, items) => { + if (!items.length) return; + lines.push('', `**${title}**`, ''); + for (const item of items) lines.push(`- \`${item.file}\`: ${item.message}`); + }; + section('Must fix', result.errors); + section('Needs a maintainer', result.warnings); + const verified = result.entries.filter(e => e.probe); + if (verified.length) { + lines.push('', '**V2 compatibility**', '', '| Entry | Detected | Evidence |', '| :--- | :--- | :--- |'); + for (const e of verified) lines.push(`| \`${path.basename(e.file)}\` | ${e.probe.compat} | ${escapeCell(e.probe.evidence.join('; ')) || '—'} |`); + } + lines.push('', 'Entry format: [contributing.md](https://github.com/Heretek-AI/awesome-opencode/blob/main/contributing.md) · Catalog policy: [docs/policy.md](https://github.com/Heretek-AI/awesome-opencode/blob/main/docs/policy.md)'); + return lines.join('\n'); +} + +module.exports = { DATA_FILE_RE, GENERATED_FILES, LABELS, analyzePullRequest, formatReport }; diff --git a/scripts/utils/repo.js b/scripts/utils/repo.js new file mode 100644 index 0000000..1a6d846 --- /dev/null +++ b/scripts/utils/repo.js @@ -0,0 +1,175 @@ +/** + * Helpers for acting on this repository's issues and pull requests via the GitHub REST API. + */ + +const { rest } = require('./github'); + +const REPO = process.env.GITHUB_REPOSITORY || 'Heretek-AI/awesome-opencode'; + +// Labels the bots manage: name -> [color, description] +const BOT_LABELS = { + 'needs-v2': ['d93f0b', 'Plugin targets the legacy V1 API; re-checked nightly'], + 'needs-metadata': ['fbca04', 'Entry fails schema or catalog rules'], + 'needs-human': ['c5def5', 'Automated checks could not decide; maintainer review needed'], + ready: ['0e8a16', 'All automated checks pass'], + submission: ['1d76db', 'Entry submitted through the issue form'], + scout: ['5319e7', 'Weekly discovery of V2 plugin candidates'], + health: ['b60205', 'Catalog link-rot and maintenance tracking'], + 'v1-sunset': ['e99695', 'V1-only plugin scheduled for removal at the sunset date'], + 'category: plugins': ['bfdadc', 'Touches data/plugins'], + 'category: themes': ['bfdadc', 'Touches data/themes'], + 'category: agents': ['bfdadc', 'Touches data/agents'], + 'category: projects': ['bfdadc', 'Touches data/projects'], + 'category: resources': ['bfdadc', 'Touches data/resources'] +}; + +const TRIAGE_LABELS = ['needs-v2', 'needs-metadata', 'needs-human', 'ready']; + +async function check(promise, what) { + const res = await promise; + if (res.status >= 300) throw new Error(`${what} failed: HTTP ${res.status} ${JSON.stringify(res.data).slice(0, 300)}`); + return res.data; +} + +/** + * Create any missing bot labels. + */ +async function ensureLabels(names = Object.keys(BOT_LABELS)) { + for (const name of names) { + const [color, description] = BOT_LABELS[name] || ['ededed', '']; + const res = await rest(`/repos/${REPO}/labels`, { method: 'POST', body: { name, color, description } }); + if (res.status !== 201 && res.status !== 422) throw new Error(`create label ${name}: HTTP ${res.status}`); + } +} + +/** + * Make the triage labels on an issue/PR exactly `wanted` (other labels untouched). + */ +async function setTriageLabels(number, wanted, current) { + const have = new Set(current); + const add = wanted.filter(l => !have.has(l)); + const remove = TRIAGE_LABELS.filter(l => have.has(l) && !wanted.includes(l)); + if (add.length) await ensureLabels(add); + if (add.length) await check(rest(`/repos/${REPO}/issues/${number}/labels`, { method: 'POST', body: { labels: add } }), 'add labels'); + for (const label of remove) { + await rest(`/repos/${REPO}/issues/${number}/labels/${encodeURIComponent(label)}`, { method: 'DELETE' }); + } + return { add, remove }; +} + +async function addLabels(number, labels) { + if (!labels.length) return; + await ensureLabels(labels.filter(l => BOT_LABELS[l])); + await check(rest(`/repos/${REPO}/issues/${number}/labels`, { method: 'POST', body: { labels } }), 'add labels'); +} + +async function listComments(number) { + const comments = []; + for (let page = 1; ; page++) { + const batch = await check(rest(`/repos/${REPO}/issues/${number}/comments?per_page=100&page=${page}`), 'list comments'); + comments.push(...batch); + if (batch.length < 100) return comments; + } +} + +/** + * Create or update the single bot comment identified by `marker`. + */ +async function upsertComment(number, marker, body) { + const full = `${marker}\n${body}`; + const existing = (await listComments(number)).find(c => c.body && c.body.startsWith(marker)); + if (existing) { + if (existing.body === full) return existing; + return check(rest(`/repos/${REPO}/issues/comments/${existing.id}`, { method: 'PATCH', body: { body: full } }), 'update comment'); + } + return check(rest(`/repos/${REPO}/issues/${number}/comments`, { method: 'POST', body: { body: full } }), 'create comment'); +} + +async function comment(number, body) { + return check(rest(`/repos/${REPO}/issues/${number}/comments`, { method: 'POST', body: { body } }), 'create comment'); +} + +/** + * All open pull requests (with head repo/ref/sha and labels). + */ +async function listOpenPulls() { + const pulls = []; + for (let page = 1; ; page++) { + const batch = await check(rest(`/repos/${REPO}/pulls?state=open&per_page=100&page=${page}`), 'list pulls'); + pulls.push(...batch); + if (batch.length < 100) return pulls; + } +} + +/** + * Files changed in a PR, with the new text of data files read at the PR head. + * @returns {Promise<{path: string, status: string, content?: string, baseContent?: string}[]>} + */ +async function pullChanges(pull, { wantContent = p => p.startsWith('data/') && p.endsWith('.yaml') } = {}) { + const files = []; + for (let page = 1; ; page++) { + const batch = await check(rest(`/repos/${REPO}/pulls/${pull.number}/files?per_page=100&page=${page}`), 'list PR files'); + files.push(...batch); + if (batch.length < 100) break; + } + const headRepo = (pull.head.repo && pull.head.repo.full_name) || REPO; + const changes = []; + for (const f of files) { + if (f.status === 'renamed') { + changes.push({ path: f.previous_filename, status: 'removed' }); + changes.push({ path: f.filename, status: 'added' }); + } else { + changes.push({ path: f.filename, status: f.status === 'changed' ? 'modified' : f.status }); + } + } + for (const change of changes) { + if (change.status === 'removed' || !wantContent(change.path)) continue; + change.content = await fileText(headRepo, change.path, pull.head.sha); + if (change.status === 'modified') change.baseContent = await fileText(REPO, change.path, pull.base.sha); + } + return changes; +} + +async function fileText(repo, filePath, ref) { + const res = await rest(`/repos/${repo}/contents/${filePath.split('/').map(encodeURIComponent).join('/')}?ref=${ref}`); + if (res.status !== 200 || !res.data || typeof res.data.content !== 'string') return undefined; + return Buffer.from(res.data.content, 'base64').toString('utf8'); +} + +/** + * Approve the pull_request "validate" run(s) waiting on a commit. GitHub holds pull_request runs for PRs + * opened or updated by github-actions[bot] as action_required, and only that run satisfies the required + * check on main (a workflow_dispatch run on the same commit does not). + * @param {string} sha - PR head commit + * @param {object} [options] - { waitSeconds: how long to wait for the run to appear } + * @returns {Promise} number of runs approved + */ +async function approvePendingRuns(sha, { waitSeconds = 60 } = {}) { + for (let waited = 0; ; waited += 5) { + const runs = await check(rest(`/repos/${REPO}/actions/workflows/validate-pr.yml/runs?head_sha=${sha}&event=pull_request&per_page=10`), 'list runs'); + const pending = (runs.workflow_runs || []).filter(r => r.conclusion === 'action_required'); + for (const run of pending) await rest(`/repos/${REPO}/actions/runs/${run.id}/approve`, { method: 'POST' }); + if (pending.length || (runs.workflow_runs || []).length || waited >= waitSeconds) return pending.length; + await new Promise(r => setTimeout(r, 5000)); + } +} + +/** + * Get the "validate" check running again for a PR's head commit: approve a held run, otherwise re-run + * the latest pull_request run. + */ +async function revalidate(pull) { + if (await approvePendingRuns(pull.head.sha, { waitSeconds: 30 })) return true; + const runs = await check(rest(`/repos/${REPO}/actions/workflows/validate-pr.yml/runs?head_sha=${pull.head.sha}&event=pull_request&per_page=5`), 'list runs'); + const run = runs.workflow_runs && runs.workflow_runs[0]; + if (run && run.status === 'completed') { + await rest(`/repos/${REPO}/actions/runs/${run.id}/rerun`, { method: 'POST' }); + return true; + } + return false; +} + +module.exports = { + BOT_LABELS, REPO, TRIAGE_LABELS, + addLabels, approvePendingRuns, comment, ensureLabels, fileText, listComments, listOpenPulls, pullChanges, revalidate, setTriageLabels, upsertComment +}; diff --git a/scripts/utils/submission.js b/scripts/utils/submission.js new file mode 100644 index 0000000..924db8d --- /dev/null +++ b/scripts/utils/submission.js @@ -0,0 +1,139 @@ +/** + * Build catalog entries from structured input (issue form, scout candidates, CLI scaffolder). + */ + +const fs = require('fs'); +const path = require('path'); +const { CATEGORIES, DATA_DIR, canonicalKey, checkCatalog, loadCatalog, parseRepoUrl } = require('./catalog'); +const { probeCompat } = require('./compat'); +const { dumpEntry } = require('./format'); +const { slugify } = require('./yaml'); + +const ISSUE_FORM_FIELDS = { + 'Name': 'name', + 'Repository URL': 'repo', + 'Folder inside the repository': 'path', + 'npm package': 'npm', + 'Category': 'category', + 'Kind': 'kind', + 'Topics': 'topics', + 'Tagline': 'tagline', + 'Description': 'description', + 'Documentation URL': 'homepage', + 'Installation': 'installation' +}; + +const EMPTY = /^(_no response_|none|n\/a|-)?$/i; + +/** + * Parse a GitHub issue form body ("### Label\n\nvalue" sections). + * @param {string} body + * @returns {object} raw fields keyed by ISSUE_FORM_FIELDS values + */ +function parseIssueForm(body) { + const fields = {}; + const sections = String(body || '').split(/^###\s+/m).slice(1); + for (const section of sections) { + const [label, ...rest] = section.split('\n'); + const key = ISSUE_FORM_FIELDS[label.trim()]; + if (!key) continue; + let value = rest.join('\n').trim(); + if (EMPTY.test(value)) continue; + if (key === 'installation') value = value.replace(/^```\w*\n?|\n?```$/g, '').trim(); + fields[key] = value; + } + return fields; +} + +/** + * Normalize raw input into entry data. + * @param {object} input - { name, repo, path, npm, category, kind, topics, tagline, description, homepage, installation } + * @returns {{category: string, data: object}} + */ +function normalizeInput(input) { + const category = String(input.category || '').trim().toLowerCase(); + const topics = Array.isArray(input.topics) + ? input.topics + : String(input.topics || '').split(/[,\n]/).map(t => t.trim().toLowerCase()).filter(Boolean); + let repo = String(input.repo || '').trim().replace(/\.git$/, '').replace(/\/+$/, ''); + let repoPath = input.path ? String(input.path).trim().replace(/^\/+|\/+$/g, '') : undefined; + // Accept a pasted /tree// URL by splitting it into repo + path + const tree = repo.match(/^(https:\/\/github\.com\/[^/]+\/[^/]+)\/tree\/[^/]+\/(.+)$/); + if (tree) { + repo = tree[1]; + repoPath = repoPath || tree[2]; + } + const data = { + name: input.name && String(input.name).trim(), + repo, + path: repoPath, + npm: input.npm ? String(input.npm).trim().replace(/^https:\/\/www\.npmjs\.com\/package\//, '') : undefined, + homepage: input.homepage ? String(input.homepage).trim() : undefined, + tagline: input.tagline && String(input.tagline).trim(), + description: input.description && String(input.description).trim(), + kind: input.kind ? String(input.kind).trim().toLowerCase() : undefined, + topics, + compat: input.compat, + installation: input.installation ? String(input.installation).trim() : undefined + }; + return { category, data }; +} + +/** + * Pick a free filename: .yaml (or the monorepo folder name), then -.yaml. + * @returns {string} path relative to the repository root + */ +function chooseFile(category, data, taken = new Set()) { + const parsed = parseRepoUrl(data.repo) || { owner: 'entry', name: slugify(data.name || 'entry') }; + const base = slugify(data.path ? path.basename(data.path) : parsed.name) || slugify(data.name || 'entry'); + const candidates = [base, slugify(`${parsed.owner}-${base}`), slugify(`${base}-${data.name || ''}`)]; + for (const candidate of candidates) { + const file = path.join('data', category, `${candidate}.yaml`); + if (!taken.has(file) && !fs.existsSync(path.join(DATA_DIR, '..', file))) return file; + } + for (let i = 2; ; i++) { + const file = path.join('data', category, `${base}-${i}.yaml`); + if (!taken.has(file) && !fs.existsSync(path.join(DATA_DIR, '..', file))) return file; + } +} + +/** + * Build, verify and serialize an entry. + * @param {object} input - raw fields + * @param {object} [options] - { probe: boolean } + * @returns {Promise<{ok: boolean, problems: string[], notes: string[], category: string, file?: string, text?: string, data: object}>} + */ +async function buildEntry(input, { probe = true } = {}) { + const { category, data } = normalizeInput(input); + const problems = []; + const notes = []; + + if (!CATEGORIES.includes(category)) { + problems.push(`category must be one of: ${CATEGORIES.join(', ')}`); + return { ok: false, problems, notes, category, data }; + } + if (category === 'plugins') data.kind = data.kind || 'plugin'; + if (category === 'themes') data.kind = data.kind || 'theme'; + + if (probe && data.repo && (category === 'plugins' || data.npm)) { + const result = (await probeCompat([{ key: 'entry', repo: data.repo, path: data.path, npm: data.npm, plugin: category === 'plugins' }])).get('entry'); + data.compat = result.compat === 'unknown' && category !== 'plugins' ? 'n/a' : result.compat; + notes.push(`V2 check: ${result.compat}${result.evidence.length ? ` (${result.evidence.join('; ')})` : ''}`); + if (category === 'plugins' && result.compat === 'v1') { + problems.push('this plugin targets the legacy V1 plugin API. New plugins must depend on @opencode/plugin and export Plugin.define({ id, setup(ctx) }). Edit this issue after migrating and the check runs again.'); + } + } else if (category !== 'plugins') { + data.compat = data.compat || 'n/a'; + } + + const { entries } = loadCatalog(); + const file = chooseFile(category, data); + const entry = { category, id: path.basename(file, '.yaml'), file, data }; + const duplicate = entries.find(e => e.data.repo && canonicalKey(e.data) === canonicalKey(data)); + if (duplicate) problems.push(`already in the catalog as ${duplicate.file}`); + for (const problem of checkCatalog([entry])) problems.push(problem.message); + + return { ok: problems.length === 0, problems, notes, category, file, text: dumpEntry(data), data }; +} + +module.exports = { ISSUE_FORM_FIELDS, buildEntry, chooseFile, normalizeInput, parseIssueForm }; diff --git a/scripts/utils/suggest.js b/scripts/utils/suggest.js new file mode 100644 index 0000000..9f03980 --- /dev/null +++ b/scripts/utils/suggest.js @@ -0,0 +1,60 @@ +/** + * Keyword-based suggestions for kind/topics, used when a bot writes an entry + * (scout candidates, backfilling older PRs). Contributors pick topics themselves in the issue form. + */ + +const TOPIC_RULES = { + memory: /\bmemor|recall|remember|knowledge graph|journal|long-term/i, + context: /\bcontext\b|compact|compaction|prun|fewer tokens|token (use|usage|sav|reduc)|prompt.?cache|compress/i, + orchestration: /multi-agent|subagent|sub-agent|orchestrat|agent team|parallel agent|background (agent|task)|swarm|delegat/i, + workflow: /workflow|spec-driven|planning|planner|\bplan\b|ralph|\bgoal\b|methodolog|brainstorm/i, + providers: /provider|\bauth\b|oauth|gateway|proxy|routing|router|model discovery|openai-compatible|litellm|subscription|api key/i, + cost: /\bcost|quota|usage|billing|pricing|spend|rate.?limit/i, + notifications: /notif|\bbell\b|alert|ntfy|toast/i, + sessions: /session|history|handoff|transcript|resume/i, + 'code-quality': /code review|\breview\b|lint|\btest|verif|quality|refactor/i, + security: /secur|sandbox|secret|\.env\b|pii|redact|privacy|injection|jailbreak|destructive|guardrail|leak/i, + git: /\bgit\b|github|gitlab|pull request|worktree|commit/i, + remote: /remote|mobile|telegram|discord|slack|whatsapp|phone|\bios\b|android/i, + web: /browser|scrap|crawl|web search|search the web|playwright|puppeteer|chromium/i, + ui: /\btui\b|sidebar|dashboard|status ?line|panel|\bgui\b|desktop app/i, + voice: /voice|speech|\bstt\b|\btts\b|dictation|whisper/i, + media: /image|video|pptx|slides|diagram|\bpdf\b|ocr/i, + docs: /documentation|\bdocs\b|research|tutorial|knowledge base|wiki/i, + environment: /docker|container|devcontainer|direnv|shell|tmux|zellij|\bnix\b|\bwsl\b/i, + observability: /telemetry|tracing|observab|monitor|logging|analytics|metrics|opentelemetry/i, + integrations: /jira|linear|notion|issue tracker|payment|stripe|calendar|email|figma|obsidian/i, + 'code-intel': /\blsp\b|tree-sitter|code search|semantic search|indexing|code ?map|symbol|language server/i, + prompting: /prompt|persona|personality|system prompt|\bskills?\b|instructions/i +}; + +const DEFAULT_KIND = { plugins: 'plugin', themes: 'theme', agents: 'agent', projects: 'tool', resources: 'guide' }; + +/** + * Suggest up to three topics from free text (name + tagline + description). + * @param {string} text + * @returns {string[]} + */ +function suggestTopics(text) { + const topics = Object.entries(TOPIC_RULES).filter(([, re]) => re.test(text)).map(([topic]) => topic); + return topics.length ? topics.slice(0, 3) : ['workflow']; +} + +/** + * Suggest a kind for a category, refined by text for projects/resources. + * @param {string} category + * @param {string} text + * @returns {string} + */ +function suggestKind(category, text) { + const t = text.toLowerCase(); + if (category === 'agents') return /\bskills?\b/.test(t) && !/subagent/.test(t) ? 'skill' : 'agent'; + if (category === 'projects' || category === 'resources') { + if (/\bmcp\b|model context protocol/.test(t) && /server/.test(t)) return 'mcp-server'; + if (category === 'projects' && /desktop|\bgui\b|web ui|mobile|\bios\b|android|vs ?code|neovim|telegram|discord|slack|\bapp\b|client/.test(t)) return 'client'; + if (category === 'resources' && /config|starter|template|dotfiles/.test(t)) return 'config'; + } + return DEFAULT_KIND[category] || 'tool'; +} + +module.exports = { suggestKind, suggestTopics }; diff --git a/scripts/utils/template.js b/scripts/utils/template.js index 0737319..58a1595 100644 --- a/scripts/utils/template.js +++ b/scripts/utils/template.js @@ -5,6 +5,12 @@ const fs = require('fs'); const path = require('path'); +const COMPAT_BADGES = { + v2: 'V2', + v1: 'V1 only', + unknown: 'unverified' +}; + /** * Read the README template * @returns {string} Template content @@ -23,30 +29,82 @@ function readTemplate() { */ function replacePlaceholder(template, placeholder, content) { const pattern = new RegExp(`\\{\\{${placeholder}\\}\\}`, 'g'); - return template.replace(pattern, content); + return template.replace(pattern, () => content); +} + +/** + * Escape text for use inside HTML (entries are untrusted contributor text). + * @param {string} text + * @returns {string} + */ +function escapeHtml(text) { + return String(text) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"'); +} + +/** + * Escape text for a markdown table cell. + * @param {string} text + * @returns {string} + */ +function escapeCell(text) { + return String(text).replace(/\\/g, '\\\\').replace(/\|/g, '\\|').replace(/\r?\n/g, ' '); +} + +/** + * Parse a URL, or null when it is not one. + * @param {string} url + * @returns {URL|null} + */ +function parseUrl(url) { + try { return new URL(url); } catch { return null; } +} + +/** + * True for npm package pages (they duplicate the npm link, so they are not shown as docs). + * @param {string} url + * @returns {boolean} + */ +function isNpmPage(url) { + const u = parseUrl(url); + return Boolean(u && (u.hostname === 'www.npmjs.com' || u.hostname === 'npmjs.com') && u.pathname.startsWith('/package/')); +} + +/** + * URL of the entry's code, including the monorepo subfolder when set. + * @param {object} entry - Parsed YAML data + * @returns {string} + */ +function sourceUrl(entry) { + return entry.path ? `${entry.repo.replace(/\/+$/, '')}/tree/HEAD/${entry.path}` : entry.repo; } /** * Generate HTML for a single entry * @param {object} entry - Parsed YAML data + * @param {string} category - Category directory name * @returns {string} HTML string for the details element */ -function generateEntryHtml(entry) { +function generateEntryHtml(entry, category) { + const url = parseUrl(entry.repo); + const isGist = Boolean(url && url.hostname === 'gist.github.com'); + const isDiscussion = Boolean(url && url.hostname === 'github.com' && /^\/[^/]+\/[^/]+\/discussions\//.test(url.pathname)); + // Determine link text based on URL type first let linkText = '🔗 View Repository'; - if (entry.repo.includes('gist.github.com')) { + if (isGist) { linkText = '🔗 View Gist'; - } else if (entry.repo.includes('/discussions/')) { + } else if (isDiscussion) { linkText = '🔗 View Discussion'; } // Extract owner/repo from URL for star badge (only for non-gist, non-discussion GitHub repos) - // Use negative lookahead to exclude gist.github.com - const isGist = entry.repo.includes('gist.github.com'); - const isDiscussion = entry.repo.includes('/discussions/'); - const repoMatch = entry.repo.match(/github\.com\/(?!gist\.)([^\/]+)\/([^\/]+)/); + const repoMatch = url && url.hostname === 'github.com' ? url.pathname.match(/^\/([^/]+)\/([^/]+)/) : null; - let summaryContent = `${entry.name}`; + let summaryContent = `${escapeHtml(entry.name)}`; // Add star badge if it's a GitHub repo (not a gist or discussion) if (repoMatch && !isGist && !isDiscussion) { @@ -56,14 +114,31 @@ function generateEntryHtml(entry) { summaryContent += ` `; } - summaryContent += ` - ${entry.tagline}`; - + // Compatibility badge: always for plugins, otherwise only when the entry uses the OpenCode API + const compat = entry.compat || (category === 'plugins' ? 'unknown' : 'n/a'); + if (COMPAT_BADGES[compat] && (category === 'plugins' || compat !== 'unknown')) { + summaryContent += ` ${COMPAT_BADGES[compat]}`; + } + if (entry.also && entry.also.includes('mcp-server')) { + summaryContent += ' MCP'; + } + + summaryContent += ` - ${escapeHtml(entry.tagline)}`; + + const links = [`${linkText}`]; + if (entry.npm) { + links.push(`📦 npm`); + } + if (entry.homepage && !isNpmPage(entry.homepage)) { + links.push(`📖 Docs`); + } + return `
${summaryContent}
- ${entry.description} + ${escapeHtml(entry.description)}

- ${linkText} + ${links.join('  •  ')}
`; } @@ -77,9 +152,13 @@ function writeReadme(content) { fs.writeFileSync(readmePath, content, 'utf8'); } -module.exports = { - readTemplate, - replacePlaceholder, - generateEntryHtml, - writeReadme +module.exports = { + escapeCell, + escapeHtml, + isNpmPage, + readTemplate, + replacePlaceholder, + generateEntryHtml, + sourceUrl, + writeReadme }; diff --git a/scripts/utils/yaml.js b/scripts/utils/yaml.js index dae0ec4..d6ccff3 100644 --- a/scripts/utils/yaml.js +++ b/scripts/utils/yaml.js @@ -1,42 +1,8 @@ /** - * YAML file reading utilities for awesome-opencode + * Filename helpers for awesome-opencode entries. + * (Catalog loading lives in ./catalog.js.) */ -const fs = require('fs'); -const path = require('path'); -const yaml = require('js-yaml'); -const { glob } = require('glob'); - -/** - * Read and parse a single YAML file - * @param {string} filePath - Path to YAML file - * @returns {object} Parsed YAML object - */ -function readYamlFile(filePath) { - try { - const content = fs.readFileSync(filePath, 'utf8'); - return yaml.load(content, { filename: filePath }); - } catch (e) { - throw new Error(`Failed to parse ${filePath}: ${e.message}`); - } -} - -/** - * Read all YAML files from a directory - * @param {string} dirPath - Directory containing YAML files - * @returns {Promise} Array of parsed YAML objects with _filePath metadata - */ -async function readYamlDir(dirPath) { - const pattern = path.join(dirPath, '*.yaml').replace(/\\/g, '/'); - const files = await glob(pattern); - - return files.map(file => ({ - ...readYamlFile(file), - _filePath: file, - _fileName: path.basename(file, '.yaml') - })); -} - /** * Convert a name to a filename-safe slug * @param {string} name - Entry name @@ -49,4 +15,4 @@ function slugify(name) { .replace(/^-+|-+$/g, ''); } -module.exports = { readYamlFile, readYamlDir, slugify }; +module.exports = { slugify }; diff --git a/scripts/validate.js b/scripts/validate.js index 26594f7..8c0f512 100644 --- a/scripts/validate.js +++ b/scripts/validate.js @@ -1,109 +1,33 @@ #!/usr/bin/env node /** - * Validate YAML files against the schema + * Validate catalog entries. * Usage: node scripts/validate.js [file1.yaml] [file2.yaml] ... - * If no files specified, validates all YAML files in data/ + * + * Always loads the whole catalog so cross-entry rules (duplicate repos) are enforced; when files are + * given, only problems in those files are reported. Exits 1 on any problem, including unparseable YAML. */ -const fs = require('fs'); const path = require('path'); -const glob = require('glob'); -const yaml = require('js-yaml'); -const { validateEntry, formatValidationErrors } = require('./utils/validation'); +const { checkCatalog, formatProblems, loadCatalog } = require('./utils/catalog'); -const DATA_DIR = path.join(__dirname, '../data'); +const ROOT = path.join(__dirname, '..'); -/** - * Get all YAML files in the data directory - * @returns {string[]} Array of file paths - */ -function getAllYamlFiles() { - const pattern = path.join(DATA_DIR, '**/*.yaml'); - return glob.sync(pattern); -} - -/** - * Load and parse a YAML file - * @param {string} filePath - Path to the YAML file - * @returns {object|null} Parsed YAML object or null on error - */ -function loadYamlFile(filePath) { - try { - const content = fs.readFileSync(filePath, 'utf8'); - return yaml.load(content); - } catch (err) { - console.error(`Error reading ${filePath}: ${err.message}`); - return null; - } -} - -/** - * Validate a single file - * @param {string} filePath - Path to the YAML file - * @returns {boolean} True if valid, false otherwise - */ -function validateFile(filePath) { - const data = loadYamlFile(filePath); - if (!data) { - return false; - } - - const result = validateEntry(data, filePath); - if (result.valid) { - console.log(`✓ ${filePath}`); - } else { - console.error(formatValidationErrors(result)); - } - - return result.valid; -} - -/** - * Main validation function - */ function main() { - const args = process.argv.slice(2); - let files = []; + const only = process.argv.slice(2) + .filter(f => f.endsWith('.yaml')) + .map(f => path.relative(ROOT, path.resolve(f))); - if (args.length > 0) { - // Validate specified files - files = args; - } else { - // Validate all YAML files in data/ - files = getAllYamlFiles(); - } + const { entries, errors } = loadCatalog(); + const problems = [...errors, ...checkCatalog(entries)] + .filter(p => only.length === 0 || only.includes(p.file)); - if (files.length === 0) { - console.log('No YAML files to validate.'); - process.exit(0); - } - - console.log(`Validating ${files.length} YAML file(s)...\n`); - - let allValid = true; - let validatedCount = 0; - - for (const file of files) { - if (fs.existsSync(file)) { - if (!validateFile(file)) { - allValid = false; - } - validatedCount++; - } else { - console.warn(`⚠ File not found: ${file}`); - allValid = false; - } - } - - console.log(''); - - if (allValid) { - console.log(`✓ All ${validatedCount} file(s) passed validation.`); - process.exit(0); - } else { - console.error(`✗ Validation failed for ${validatedCount} file(s).`); + const checked = only.length || entries.length + errors.length; + if (problems.length > 0) { + console.error(formatProblems(problems)); + console.error(`\n✗ ${new Set(problems.map(p => p.file)).size} of ${checked} file(s) failed validation.`); process.exit(1); } + console.log(`✓ All ${checked} file(s) passed validation.`); } main(); diff --git a/site/index.html b/site/index.html new file mode 100644 index 0000000..3a51351 --- /dev/null +++ b/site/index.html @@ -0,0 +1,227 @@ + + + + + +Awesome OpenCode + + + + +
+

Awesome OpenCode

+

Community catalog of OpenCode plugins, themes, agents, MCP servers, clients and tools.

+
+
+
+
+ + + + + + +
+
+
+
+
+
+ + + + diff --git a/templates/README.template.md b/templates/README.template.md index fded6ea..40fde77 100644 --- a/templates/README.template.md +++ b/templates/README.template.md @@ -1,3 +1,4 @@ +
@@ -16,6 +17,16 @@ Opencode Stars

+ +

+English +   +简体中文 +   +Русский +

+ +
@@ -24,7 +35,23 @@
-[**OFFICIAL**](#official) • [**PLUGINS**](#plugins) • [**THEMES**](#themes) • [**AGENTS**](#agents) • [**PROJECTS**](#projects) • [**RESOURCES**](#resources) +> [!NOTE] +> **Active Hard Fork**: `Heretek-AI/awesome-opencode` is the actively maintained community continuation of `awesome-opencode`. +> All original upstream issues, pull requests, and discussions are preserved and imported. Submissions and PRs are actively reviewed! + +{{STATS}} + +

+🔎 Search & filter the catalog + •  +➕ Submit an entry + •  +📋 Catalog policy +

+ +
+ +[**OFFICIAL**](#official) • [**NEW**](#recently-added) • [**PLUGINS**](#plugins) • [**THEMES**](#themes) • [**AGENTS**](#agents) • [**PROJECTS**](#projects) • [**RESOURCES**](#resources)

@@ -46,16 +73,24 @@
+
+ +

🆕 Recently Added

+ +{{RECENT}} + +
+
-🧩 PLUGINS +🧩 PLUGINS ({{COUNT_PLUGINS}})
{{PLUGINS}}
-➕ Add a Plugin via PR +➕ Add a Plugin

@@ -63,13 +98,13 @@
-🎨 THEMES +🎨 THEMES ({{COUNT_THEMES}})
{{THEMES}}
-➕ Add a Theme via PR +➕ Add a Theme

@@ -77,13 +112,13 @@
-🤖 AGENTS +🤖 AGENTS ({{COUNT_AGENTS}})
{{AGENTS}}
-➕ Add an Agent via PR +➕ Add an Agent

@@ -91,13 +126,13 @@
-🛠 PROJECTS +🛠 PROJECTS ({{COUNT_PROJECTS}})
{{PROJECTS}}
-➕ Add a Project via PR +➕ Add a Project

@@ -105,13 +140,13 @@
-📚 RESOURCES +📚 RESOURCES ({{COUNT_RESOURCES}})
{{RESOURCES}}
-➕ Add a Resource via PR +➕ Add a Resource


@@ -119,7 +154,7 @@

🤝 Contributing

Found an Awesome Opencode project?
-Submit a Pull Request to add it to the list! +Submit a Pull Request to add it to the list!

Released under CC0 1.0 Universal.
diff --git a/test/catalog.test.js b/test/catalog.test.js new file mode 100644 index 0000000..5699f9e --- /dev/null +++ b/test/catalog.test.js @@ -0,0 +1,78 @@ +const test = require('node:test'); +const assert = require('node:assert/strict'); +const yaml = require('js-yaml'); +const { canonicalKey, checkCatalog, checkEntry, loadCatalog } = require('../scripts/utils/catalog'); +const { dumpEntry } = require('../scripts/utils/format'); +const { escapeHtml, generateEntryHtml } = require('../scripts/utils/template'); + +const base = { + name: 'Thing', + repo: 'https://github.com/someone/thing', + tagline: 'Does the thing', + description: 'Does the thing well.', + kind: 'plugin', + topics: ['workflow'], + compat: 'v2' +}; +const entry = (data, category = 'plugins', file = 'data/plugins/thing.yaml') => ({ category, id: 'thing', file, data: { ...base, ...data } }); + +test('the committed catalog is valid', () => { + const { entries, errors } = loadCatalog(); + assert.deepEqual(errors, []); + assert.deepEqual(checkCatalog(entries), []); + assert.ok(entries.length > 400); +}); + +test('repo must be a repository root', () => { + for (const repo of [ + 'https://github.com/a/b/tree/main/packages/x', + 'https://github.com/a/b/blob/main/x.ts', + 'https://www.npmjs.com/package/x', + 'https://example.com' + ]) { + assert.match(checkEntry(entry({ repo })).join(), /repository root/, repo); + } + for (const repo of ['https://github.com/a/b', 'https://codeberg.org/a/b', 'https://gist.github.com/a/0123abc', 'https://github.com/a/b/discussions/19']) { + assert.deepEqual(checkEntry(entry({ repo })), [], repo); + } +}); + +test('unknown fields, bad enums, placeholders and mojibake are rejected', () => { + assert.match(checkEntry(entry({ install: 'x' })).join(), /unknown field "install"/); + assert.match(checkEntry(entry({ topics: ['nope'] })).join(), /allowed values/); + assert.match(checkEntry(entry({ repo: 'https://github.com/YOUR_USERNAME/thing' })).join(), /placeholder/); + assert.match(checkEntry(entry({ tagline: 'Fast 鈥? really' })).join(), /mis-encoded/); + assert.match(checkEntry(entry({ tagline: 'x'.repeat(121) })).join(), /120/); +}); + +test('kind must fit the category and plugins need compat', () => { + assert.match(checkEntry(entry({ kind: 'client' })).join(), /does not belong in data\/plugins/); + assert.match(checkEntry(entry({ compat: undefined })).join(), /must declare compat/); + assert.deepEqual(checkEntry(entry({ kind: 'client', compat: undefined }, 'projects', 'data/projects/thing.yaml')), []); +}); + +test('duplicates are keyed on repo and path', () => { + const a = entry({}, 'plugins', 'data/plugins/a.yaml'); + const b = entry({ repo: 'https://github.com/SomeOne/Thing.git' }, 'plugins', 'data/plugins/b.yaml'); + assert.match(checkCatalog([a, b]).map(p => p.message).join(), /duplicate of data\/plugins\/a.yaml/); + const c = entry({ path: 'packages/other' }, 'plugins', 'data/plugins/c.yaml'); + assert.deepEqual(checkCatalog([a, c]), []); + assert.equal(canonicalKey({ repo: 'https://github.com/A/B/', path: 'x/' }), 'github.com/a/b#x'); +}); + +test('dumpEntry quotes values that would break YAML and round-trips', () => { + const data = { ...base, tagline: 'Plain: no jargon', description: 'Line one\nLine two: with colon' }; + const text = dumpEntry(data); + assert.deepEqual(yaml.load(text), data); + assert.ok(text.indexOf('name:') < text.indexOf('repo:') && text.indexOf('kind:') < text.indexOf('compat:')); +}); + +test('README entries escape contributor text and show compat badges', () => { + assert.equal(escapeHtml('"x" & y'), '<b>"x" & y</b>'); + const html = generateEntryHtml({ ...base, description: 'run opencode ', compat: 'v1', npm: 'thing', path: 'pkg/x' }, 'plugins'); + assert.match(html, /<prompt>/); + assert.match(html, /V1 only<\/code>/); + assert.match(html, /tree\/HEAD\/pkg\/x/); + assert.ok(html.includes('href="https://www.npmjs.com/package/thing"')); + assert.doesNotMatch(generateEntryHtml({ ...base, compat: 'n/a' }, 'projects'), //); +}); diff --git a/test/compat.test.js b/test/compat.test.js new file mode 100644 index 0000000..225b7c6 --- /dev/null +++ b/test/compat.test.js @@ -0,0 +1,54 @@ +const test = require('node:test'); +const assert = require('node:assert/strict'); +const zlib = require('zlib'); +const { manifestMarkers, sourceMarkers, tarFiles, verdict } = require('../scripts/utils/compat'); + +const detect = manifest => verdict([{ source: 'package.json', ...manifestMarkers(manifest) }]).compat; + +test('V2 markers', () => { + assert.equal(detect({ dependencies: { '@opencode/plugin': '^2.0.0' } }), 'v2'); + assert.equal(detect({ peerDependencies: { '@opencode/theme': '2.0.14' } }), 'v2'); + assert.equal(detect({ devDependencies: { 'plugin-v2': 'npm:@opencode/plugin@2.0.14', '@opencode-ai/plugin': '1.18.25' } }), 'v2'); + assert.equal(detect({ dependencies: { '@opencode-ai/plugin': '0.0.0-beta-18027' } }), 'v2'); + assert.equal(detect({ dependencies: { '@opencode-ai/plugin': 'next' } }), 'v2'); + assert.equal(detect({ dependencies: { '@opencode-ai/client': '0.0.0-next-17444' } }), 'v2'); +}); + +test('V1 markers', () => { + assert.equal(detect({ dependencies: { '@opencode-ai/plugin': '^1.18.0' } }), 'v1'); + assert.equal(detect({ dependencies: { '@opencode-ai/plugin': '*' } }), 'v1'); + assert.equal(detect({ dependencies: { '@opencode-ai/sdk': '>=1.0.0' } }), 'v1'); +}); + +test('no markers is unknown', () => { + assert.equal(detect({ dependencies: { zod: '^3' } }), 'unknown'); + assert.equal(verdict([]).compat, 'unknown'); +}); + +test('source markers', () => { + const v2 = sourceMarkers('import { Plugin } from "@opencode/plugin"\nexport default Plugin.define({ id: "x", async setup(ctx) {} })'); + assert.deepEqual(v2.v2, ['@opencode/plugin']); + assert.equal(v2.define, true); + assert.equal(sourceMarkers('export const P = async ({ project, client, $, directory }) => ({})').v1Signature, true); + assert.equal(sourceMarkers('export const X = async () => ({\n "chat.params": async ({ model }, out) => {} })').v1Signature, true); + assert.equal(sourceMarkers('export const MAX = 1;').v1Signature, false); + assert.equal(sourceMarkers('const plugin = { id: PLAIN_ID, server: PlainPlugin, setup: setupPlain };').v2Signature, true); + assert.equal(sourceMarkers('export default { id: "x", async setup(ctx) { ctx.session.hook("prompt") } }').v2Signature, true); + assert.equal(sourceMarkers('export default { id: "obvious-grid", server: async (input) => ({ event }) }').v2Signature, false); +}); + +test('tarFiles reads regular files and strips the top folder', () => { + const header = (name, size, type = '0') => { + const h = Buffer.alloc(512); + h.write(name, 0); + h.write(size.toString(8).padStart(11, '0') + '\0', 124); + h.write(type, 156); + return h; + }; + const body = Buffer.from('export default 1'); + const padded = Buffer.concat([body, Buffer.alloc(512 - body.length)]); + const tar = Buffer.concat([header('owner-repo-sha/', 0, '5'), header('owner-repo-sha/src/index.ts', body.length), padded, Buffer.alloc(1024)]); + const files = [...tarFiles(zlib.gunzipSync(zlib.gzipSync(tar)))]; + assert.deepEqual(files.map(f => f.name), ['src/index.ts']); + assert.equal(files[0].data.toString(), 'export default 1'); +}); diff --git a/test/pr-checks.test.js b/test/pr-checks.test.js new file mode 100644 index 0000000..921b93f --- /dev/null +++ b/test/pr-checks.test.js @@ -0,0 +1,64 @@ +const test = require('node:test'); +const assert = require('node:assert/strict'); +const { analyzePullRequest } = require('../scripts/utils/pr-checks'); +const { normalizeInput, parseIssueForm } = require('../scripts/utils/submission'); + +const good = [ + 'name: Thing', + 'repo: https://github.com/someone/brand-new-thing', + 'tagline: Does the thing', + 'description: Does the thing well.', + 'kind: plugin', + 'topics:', + ' - workflow', + 'compat: v2', + '' +].join('\n'); +const existing = { category: 'plugins', id: 'old', file: 'data/plugins/old.yaml', data: { name: 'Old', repo: 'https://github.com/someone/old', tagline: 't', description: 'd', kind: 'plugin', topics: ['ui'], compat: 'v2' } }; + +test('a valid new entry is ready', async () => { + const r = await analyzePullRequest({ changes: [{ path: 'data/plugins/thing.yaml', status: 'added', content: good }], baseEntries: [existing], probe: false }); + assert.deepEqual(r.errors, []); + assert.deepEqual(r.labels, ['ready']); + assert.deepEqual(r.categories, ['plugins']); +}); + +test('editing the generated README is rejected', async () => { + const r = await analyzePullRequest({ changes: [{ path: 'README.md', status: 'modified' }], baseEntries: [existing], probe: false }); + assert.match(r.errors[0].message, /generated/); + assert.deepEqual(r.labels, ['needs-metadata']); +}); + +test('broken YAML and duplicates are reported against the PR file', async () => { + const broken = await analyzePullRequest({ changes: [{ path: 'data/plugins/x.yaml', status: 'added', content: 'tagline: A: B\nname: x' }], baseEntries: [], probe: false }); + assert.match(broken.errors[0].message, /invalid YAML/); + const dup = await analyzePullRequest({ + changes: [{ path: 'data/plugins/thing.yaml', status: 'added', content: good.replace('brand-new-thing', 'old') }], + baseEntries: [existing], + probe: false + }); + assert.ok(dup.errors.some(e => /duplicate/.test(e.message))); +}); + +test('reusing a filename for another repo needs a human', async () => { + const r = await analyzePullRequest({ + changes: [{ path: 'data/plugins/old.yaml', status: 'modified', content: good, baseContent: 'repo: https://github.com/someone/old\n' }], + baseEntries: [existing], + probe: false + }); + assert.ok(r.warnings.some(w => /changes this entry's target/.test(w.message))); + assert.ok(r.labels.includes('needs-human')); +}); + +test('issue form parsing and normalization', () => { + const body = '### Name\n\nThing\n\n### Repository URL\n\nhttps://github.com/a/b/tree/main/packages/x\n\n### npm package\n\n_No response_\n\n### Category\n\nplugins\n\n### Topics\n\nmemory, context\n\n### Installation\n\n```markdown\nnpm i thing\n```'; + const fields = parseIssueForm(body); + assert.equal(fields.name, 'Thing'); + assert.equal(fields.npm, undefined); + assert.equal(fields.installation, 'npm i thing'); + const { category, data } = normalizeInput(fields); + assert.equal(category, 'plugins'); + assert.equal(data.repo, 'https://github.com/a/b'); + assert.equal(data.path, 'packages/x'); + assert.deepEqual(data.topics, ['memory', 'context']); +});