diff --git a/.github/workflows/validate-pr.yml b/.github/workflows/validate-pr.yml.disabled similarity index 100% rename from .github/workflows/validate-pr.yml rename to .github/workflows/validate-pr.yml.disabled diff --git a/README.md b/README.md index ef1de85..4f3a267 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,12 @@
+> [!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! + +
+ [**OFFICIAL**](#official) • [**PLUGINS**](#plugins) • [**THEMES**](#themes) • [**AGENTS**](#agents) • [**PROJECTS**](#projects) • [**RESOURCES**](#resources)
@@ -1316,7 +1322,7 @@ suggestions. All processing stays local by default — no data leaves the machin
-➕ Add a Plugin via PR +➕ Add a Plugin via PR
@@ -1396,7 +1402,7 @@ Also available for bat and Ghostty in the same repository.
-➕ Add a Theme via PR +➕ Add a Theme via PR
@@ -1489,7 +1495,7 @@ Also available for bat and Ghostty in the same repository.
-➕ Add an Agent via PR +➕ Add an Agent via PR
@@ -2084,7 +2090,7 @@ template (cowork-with-github). Install: drag-and-drop .plugin into Cowork.
-➕ Add a Project via PR +➕ Add a Project via PR
@@ -2159,7 +2165,7 @@ template (cowork-with-github). Install: drag-and-drop .plugin into Cowork.
-➕ Add a Resource via PR +➕ Add a Resource via PR

@@ -2167,7 +2173,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/data/schema.json b/data/schema.json index b279a3c..9b1812d 100644 --- a/data/schema.json +++ b/data/schema.json @@ -1,8 +1,8 @@ { "$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", "type": "object", "properties": { "name": { 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/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/templates/README.template.md b/templates/README.template.md index fded6ea..17b13f4 100644 --- a/templates/README.template.md +++ b/templates/README.template.md @@ -24,6 +24,12 @@
+> [!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! + +
+ [**OFFICIAL**](#official) • [**PLUGINS**](#plugins) • [**THEMES**](#themes) • [**AGENTS**](#agents) • [**PROJECTS**](#projects) • [**RESOURCES**](#resources)
@@ -55,7 +61,7 @@ {{PLUGINS}}
-➕ Add a Plugin via PR +➕ Add a Plugin via PR
@@ -69,7 +75,7 @@ {{THEMES}}
-➕ Add a Theme via PR +➕ Add a Theme via PR
@@ -83,7 +89,7 @@ {{AGENTS}}
-➕ Add an Agent via PR +➕ Add an Agent via PR
@@ -97,7 +103,7 @@ {{PROJECTS}}
-➕ Add a Project via PR +➕ Add a Project via PR
@@ -111,7 +117,7 @@ {{RESOURCES}}
-➕ Add a Resource via PR +➕ Add a Resource via PR

@@ -119,7 +125,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.