Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
238 commits
Select commit Hold shift + click to select a range
4956ee3
tui: add escape key handling to permission dialogs for better keyboar…
thdxr Jan 2, 2026
49c5c2b
ci
thdxr Jan 2, 2026
b4af8a6
ci
thdxr Jan 2, 2026
ff0bd84
upgrade opentui to v0.1.68, using gpa
kommander Jan 3, 2026
f6fe709
Update Nix flake.lock and hashes
actions-user Jan 3, 2026
052de3c
feat: add managed git worktrees (#6674)
adamdotdevin Jan 3, 2026
a235aec
chore: generate
actions-user Jan 3, 2026
f2ec036
docs: rm incorrect -p alias from docs (#6721)
opencode-agent[bot] Jan 3, 2026
401b498
fix(tui): pass attach directory to sdk client (#6715)
shuv1337 Jan 3, 2026
f991fbb
core: ephemerally wrap queued user messages with reminder to stay on …
rekram1-node Jan 3, 2026
2b66b31
ignore: update bug report template
rekram1-node Jan 3, 2026
47c670a
tui: add reject message support to permission dialogs for better user…
thdxr Jan 3, 2026
77fcefc
chore: generate
actions-user Jan 3, 2026
b9b0e34
core: improve plugin loading to handle builtin plugin failures gracef…
rekram1-node Jan 3, 2026
da6df3d
fix(kotlin-ls): improve root detection for Gradle multi-project build…
JBou Jan 3, 2026
5c5e636
feat: add per-project MCP config overrides (#5406)
jknlsn Jan 3, 2026
527553a
chore: generate
actions-user Jan 3, 2026
5f93bee
feat(app): add image preview support in session viewer (#6678)
shuv1337 Jan 3, 2026
308e806
fix(server): update server URL normalization to retain path (#6647)
OpeOginni Jan 3, 2026
12eea69
fix(tui): make mcp status icon muted when no mcp servers are enabled …
itsrainingmani Jan 3, 2026
c7c1790
Desktop: Edit Project Fix (#6757)
dbpolito Jan 3, 2026
69d4ef0
docs: enhance MCP servers documentation with a tip (#6713)
sin4ch Jan 3, 2026
586e734
fix(mcp): add timeout to client.connect() calls (#6760)
RhysSullivan Jan 3, 2026
f6cc847
fix(tui): make lsp status icon muted when no lsps are active (#6773)
itsrainingmani Jan 3, 2026
0b4af95
core: add sandbox support for git worktrees to allow working in multi…
thdxr Jan 3, 2026
8b6cf70
chore: generate
actions-user Jan 3, 2026
81e8d29
oops
thdxr Jan 4, 2026
5944443
core: fix dependency installation and git worktree branch creation
thdxr Jan 4, 2026
dcf3700
tui: remove openrouter provider from priority list
thdxr Jan 4, 2026
235837d
fix(app): diff rendering performance
adamdotdevin Jan 4, 2026
74d0d2b
docs: update AGENTS.md (#6800)
aryasaatvik Jan 4, 2026
a5a1919
chore: generate
actions-user Jan 4, 2026
6b12a00
docs: Add Vercel AI Gateway to provider docs (#6790)
jerilynzheng Jan 4, 2026
d3fd6d1
zen: update models
fwang Jan 4, 2026
72cef0d
feat: add --variant flag to run command (#6805)
shuv1337 Jan 4, 2026
b934c22
ci: add duplicate PR detection bot
rekram1-node Jan 4, 2026
5aa4fd0
core: add variant to chat.message input
rekram1-node Jan 4, 2026
02540b2
ignore: update sst -> anomalyco
rekram1-node Jan 4, 2026
96a00ff
core: update github copilot model model priority list
rekram1-node Jan 4, 2026
4d7d28c
docs: Add opencode-scheduler plugin to ecosystem (#6804)
benjaminshafii Jan 4, 2026
c3fd3c8
fix(plugin): prevent duplicate plugin function initialization (#6787)
ShpetimA Jan 4, 2026
3611260
core: remove hardcoded .env read block and use new permissions model …
rekram1-node Jan 4, 2026
41cf45a
tui: fix system theme diff highlighting
rekram1-node Jan 4, 2026
4486174
github: handle duplicate PR creation when agent creates PR (#6777)
elithrar Jan 4, 2026
7ce0520
fix(app): auto-scroll behaviors
adamdotdevin Jan 4, 2026
c9f907c
fix(app): don't override ctrl+a on windows
adamdotdevin Jan 4, 2026
177b01a
fix(app): scroll position restoration
adamdotdevin Jan 4, 2026
5053822
fix(app): auto-scroll
adamdotdevin Jan 4, 2026
d72d7ab
tweak: prioritize free gpt-5-mini for small model in github copilot
rekram1-node Jan 4, 2026
8aa56dc
docs: add logging best practices for plugin authors (#6833)
elithrar Jan 4, 2026
4f3ac70
chore: generate
actions-user Jan 4, 2026
29672e7
ci: update duplicate pr action
rekram1-node Jan 4, 2026
1f8dab5
docs: typo in subtask documentation (#6821)
davejpeters Jan 4, 2026
f3cd3b8
Remove opencode-skills entry from ecosystem.mdx (#6817)
felipeorlando Jan 4, 2026
2d074f0
initialize config in worktree
thdxr Jan 4, 2026
e00621c
feat(nix): preliminary desktop app flake integration (#6135)
jerome-benoit Jan 4, 2026
21dc3c2
feat: mcp resources (#6542)
paoloricciuti Jan 4, 2026
24dedb4
fix(tui): add missing `theme_list` keybind (#6779)
aspiers Jan 4, 2026
555a5cc
chore: generate
actions-user Jan 4, 2026
97977f6
ensure @opencode-ai/plugin exists only on first run
thdxr Jan 4, 2026
a76570b
tui: add development scripts for better debugging workflow
thdxr Jan 4, 2026
0f9130b
Update Nix flake.lock and hashes
actions-user Jan 4, 2026
dc25669
release: v1.1.1
Jan 4, 2026
12ffb27
fix(app): prompt input improvements
adamdotdevin Jan 4, 2026
5ca2f6c
fix(app): prompt input improvements
adamdotdevin Jan 4, 2026
24d9c1d
chore: generate
actions-user Jan 4, 2026
cdd6ea5
core: improve Rust formatter detection and add cargo fmt support
thdxr Jan 4, 2026
7304ba6
tui: add session search functionality with debounced input and server…
thdxr Jan 4, 2026
1e28d10
chore: generate
actions-user Jan 4, 2026
f8442ad
Update Nix flake.lock and hashes
actions-user Jan 4, 2026
226a5c2
tui: fix optional session access to prevent runtime errors
thdxr Jan 4, 2026
5f10243
tui: fix session configuration merge conflict resolution
thdxr Jan 4, 2026
1d54f90
docs: add instructions for running web and desktop apps during develo…
rekram1-node Jan 4, 2026
e5abe1e
tweak: bump default to 30 seconds (lots of people complained about 5...)
rekram1-node Jan 4, 2026
554572b
fix: prevent main model thinking variant from applying to small model…
melihmucuk Jan 4, 2026
88c306e
fix: prevent session list rows from wrapping to 2 lines (#6812)
rgodha24 Jan 4, 2026
80235f3
ci: fix dup pr action
rekram1-node Jan 4, 2026
c545fa2
ci: nix desktop
rekram1-node Jan 4, 2026
c74c66e
fix(ui): fix select chevron alignment (#6690)
albingroen Jan 5, 2026
65c7168
fix(app): fix custom slash commands not showing on initial / (#6829)
Raviguntakala Jan 5, 2026
0c2ccf2
Fix a few mobile screen size issues (#6808)
carterworks Jan 5, 2026
5450644
docs: restructure permissions documentation to clarify v1.1.1 changes…
thdxr Jan 5, 2026
3e09abb
feat(desktop): add AppStream MetaInfo file (#6030)
NN708 Jan 5, 2026
52ad134
feat(app): add SVG preview support in session viewer (#6868)
shuv1337 Jan 5, 2026
478fec6
chore: generate
actions-user Jan 5, 2026
393cf78
Desktop: Improve Big Session Navigation - Scrollable (#6837)
dbpolito Jan 5, 2026
9ac00f5
Desktop: Adding Home Icon on Responsive Menu (#6794)
dbpolito Jan 5, 2026
e93699b
perf: optimize model dialog visibility lookups (#6791)
shkumbinhasani Jan 5, 2026
fb60f9c
Desktop: Fix Responsive Menu (#6789)
dbpolito Jan 5, 2026
91ed101
feat(desktop): implement auto-scroll for active command in slash popo…
OpeOginni Jan 5, 2026
59ed8cc
chore: generate
actions-user Jan 5, 2026
2410a6b
Fix symmetric padding in TUI input field (#6894)
opencode-agent[bot] Jan 5, 2026
555d7fc
ci: make sure opencode is installed
rekram1-node Jan 5, 2026
8b3ae08
acp: handle case where big-pickle is unavailable as a fallback
rekram1-node Jan 5, 2026
f2e65e4
fix: handle skill scan failures for .claude gracefully
rekram1-node Jan 5, 2026
9c55cb7
zen: add index
fwang Jan 5, 2026
166f169
chore: generate
actions-user Jan 5, 2026
7324b22
fix(tui): allow exit when viewing child session (#6898)
rmk40 Jan 5, 2026
9f38af4
core: fix permission evaluation to use rule-based matching instead of…
thdxr Jan 5, 2026
035baa4
ignore: add codeowners file for adam
rekram1-node Jan 5, 2026
2f5b2b2
core: fix permission rule matching to use permission field instead of…
thdxr Jan 5, 2026
7e14cc6
ci: fix OPENCODE_PERMISSION env vars
rekram1-node Jan 5, 2026
4d187af
release: v1.1.2
Jan 5, 2026
c285304
fix: for anthropic compat ensure empty msgs and empty reasoning is fi…
rekram1-node Jan 5, 2026
06acd70
tweak: transform
rekram1-node Jan 5, 2026
d39ebbc
chore: generate
actions-user Jan 5, 2026
265cbae
fix(app): fix image dragging in project edit dialog (#6700)
albingroen Jan 5, 2026
e15af82
zen: optimize query
fwang Jan 5, 2026
11b0df6
wip: zen
fwang Jan 5, 2026
2cb3b04
fix: cleaner interrupted experience (#6785)
iamdavidhill Jan 5, 2026
7f870cc
wip: zen
fwang Jan 5, 2026
91d5ce8
tui: add system theme resolution and event handling
thdxr Jan 5, 2026
283bdce
sync
fwang Jan 5, 2026
ced093e
sync
fwang Jan 5, 2026
8e9a0c4
Desktop: Install CLI (#6526)
dbpolito Jan 5, 2026
bbd1c07
fix(app): fix flicker and navigation when collapsing/expanding projec…
albingroen Jan 5, 2026
9771325
feat(app): highlight collapsed active project in sidebar (#6958)
albingroen Jan 5, 2026
6b207b0
fix(app): avoid unintended submits during IME composition (#6952)
MogamiTsuchikawa Jan 5, 2026
e3b4d4a
feat(bedrock): config options and authentication precedence (#6377)
wnkz Jan 5, 2026
1bf20f0
docs: add description for MCP command (#6944)
cravenceiling Jan 5, 2026
4b7301e
fix: lucent-orng bg transparency for slash commands (#6938)
roerohan Jan 5, 2026
c6a241e
ci: prevent duplicate PR check from flagging current PR as duplicate …
Raviguntakala Jan 5, 2026
0917991
docs: update GHA examples to use `actions/checkout@v6` (#6969)
joshuadavidthomas Jan 5, 2026
bf9ee32
fix(provider): add support for jp. prefix in Amazon Bedrock cross-reg…
ikeda-tomoya-swx Jan 5, 2026
a38e170
fix: pass image parts to custom commands (#6525)
melihmucuk Jan 5, 2026
aef0100
chore: generate
actions-user Jan 5, 2026
5a38a6f
tui: autocomplete: expand directory on Tab, select on Enter (#6975)
yuguorui Jan 5, 2026
0276885
core: preserve permission config key order to maintain user-defined p…
thdxr Jan 5, 2026
362a657
chore: generate
actions-user Jan 5, 2026
d119167
fix(app): worktree selection should navigate to worktree
adamdotdevin Jan 5, 2026
d315026
fix(app): prompt input shouldn't cover content
adamdotdevin Jan 5, 2026
001b486
fix(app): performance improvements through event batching
adamdotdevin Jan 5, 2026
cdbb009
fix(app): terminal flakiness
adamdotdevin Jan 5, 2026
cb8533e
fix(app): terminal long-running processes
adamdotdevin Jan 5, 2026
2ff9a75
fix(app): bottom padding
adamdotdevin Jan 5, 2026
ec637aa
fix(app): store image attachments
adamdotdevin Jan 5, 2026
4f49967
release: v1.1.3
Jan 5, 2026
8996185
Feat/clickable subtask (#6846)
OpeOginni Jan 5, 2026
48d14d4
chore: generate
actions-user Jan 5, 2026
4137c66
upgrade opentui to v0.1.69, with some text rendering performance impr…
kommander Jan 5, 2026
19123b6
Update Nix flake.lock and hashes
actions-user Jan 5, 2026
2ca0ae7
fix(app): more defensive, handle no git
adamdotdevin Jan 5, 2026
5c66c8b
fix(core): filter dead worktrees
adamdotdevin Jan 5, 2026
4dc3cb9
wip: zen
fwang Jan 5, 2026
cf069dd
wip: zen
fwang Jan 5, 2026
2105373
chore: generate
actions-user Jan 5, 2026
8da8906
wip: zen
fwang Jan 6, 2026
9197a2a
docs: polish markdown wording and capitalization (#7019)
T1mn Jan 6, 2026
d486c1c
docs: fix order of permissions in agents docs (permissions subsection…
shanebishop1 Jan 6, 2026
a721810
ci: tweak prompt
rekram1-node Jan 6, 2026
45fea65
fix: use actual version in install script (#7044)
xiliumz Jan 6, 2026
f510d17
fix(desktop): add single-instance plugin to prevent multiple windows …
Junseo5 Jan 6, 2026
e5a8681
update Cargo.lock
Brendonovich Jan 6, 2026
4ecb305
Fix(app): @pierre/diffs will crash when a diff has undefined text (#7…
Eric-Guo Jan 6, 2026
0b02f6d
ignore: update download stats 2026-01-06
actions-user Jan 6, 2026
3f463bc
fix(app): scroll store performance
adamdotdevin Jan 6, 2026
b88bcd4
fix(app): code splitting for web load perf gains
adamdotdevin Jan 6, 2026
49d837e
feat(app): add middle-click to close tabs in review sidebar (#7094)
justrau Jan 6, 2026
4142e1b
fix(app): open review sidebar when selecting file from picker (#7096)
justrau Jan 6, 2026
6092f87
feat(app): add view button to open files from review sidebar (#7095)
justrau Jan 6, 2026
528c6c1
docs(ecosystem): add opencode-devcontainers plugin (#7100)
athal7 Jan 6, 2026
f0e559c
fix: sidebar title padding to prevent scrollbar edge case (#7089)
ryanwyler Jan 6, 2026
d0a1e6f
docs: add Simplified Chinese README (#7055)
T1mn Jan 6, 2026
1016a52
fix(provider): add jp. prefix auto-assignment for Tokyo region (ap-no…
ikeda-tomoya-swx Jan 6, 2026
8265621
fix: prevent jdtls path checks from throwing (#7052)
T1mn Jan 6, 2026
a35c278
chore: generate
actions-user Jan 6, 2026
aa612b2
feat(tui): add 'c' shortcut to copy device code in OAuth flow (#7020)
akinfelami Jan 6, 2026
d76d6db
fix: add missing await for available skills in `skill` tool (#7072)
mwolting Jan 6, 2026
485aadc
fix: restore skill filtering by agent permissions (#7042)
malhashemi Jan 6, 2026
ecbcbfb
fix(app): more contrast in terminal text
adamdotdevin Jan 6, 2026
bb09df0
fix(desktop): use current_binary() to support symlinked executables (…
jerome-benoit Jan 6, 2026
c7a2c73
fix: ensure 'name' isnt being sent in request body for custom agent
rekram1-node Jan 6, 2026
01eadf3
test: fix test
rekram1-node Jan 6, 2026
675eba6
Revert "fix(desktop): use current_binary() to support symlinked execu…
rekram1-node Jan 6, 2026
494e034
docs: fix desktop stuff
rekram1-node Jan 6, 2026
3049ac5
docs: Expand keybinds documentation (#7108)
DamianB-BitFlipper Jan 6, 2026
5fc4472
OpenCode Black
fwang Jan 6, 2026
5db78f2
core: fix title generation for subtask-only messages to extract actua…
rekram1-node Jan 6, 2026
5181e4e
fix(app): copy and paste in terminal was broken
adamdotdevin Jan 6, 2026
630476a
load `OPENCODE_CONFIG_DIR` AGENTS.md into the system prompt (#7115)
ThomasGormley Jan 6, 2026
d4e7a88
feat(cli): frecency file autocomplete (#6603)
galkatz373 Jan 6, 2026
cde06e9
chore: update stars count (#7120)
byBackfish Jan 6, 2026
a10cc63
feat: url based instructions (#7125)
spoons-and-mirrors Jan 6, 2026
ba10524
fix(app): open links in new tab or browser (#7127)
justrau Jan 6, 2026
7d6ce6f
docs: add OpenCode-Obsidian plugin (#7129)
mtymek Jan 6, 2026
32e0b61
adding timeout (#7128)
spoons-and-mirrors Jan 6, 2026
dc62f93
zen: fix rate limit
fwang Jan 6, 2026
409f8f6
chore: generate
actions-user Jan 6, 2026
f7b3371
docs: readme
jayair Jan 6, 2026
dadddca
Desktop: Fix Big Messages (#7133)
dbpolito Jan 6, 2026
b2341c2
release: v1.1.4
Jan 6, 2026
625c9da
fix: ensure commands listing subagent work
rekram1-node Jan 6, 2026
43eefbc
chore: generate
actions-user Jan 6, 2026
9906d42
remove hallucinated keybinding
kommander Jan 6, 2026
58aba1c
chore: Refactor style guide to use consistent language (#7139)
Kamkmgamer Jan 6, 2026
dee0226
fix(tui): restore attach session lookup behavior (#7150)
rmk40 Jan 7, 2026
a2f80f7
fix: add --use-system-ca flag in execArgv
rekram1-node Jan 7, 2026
488c350
fix(app): terminal selection color contrast
adamdotdevin Jan 7, 2026
7672b72
fix(app): permission auto-accept should hide when not needed
adamdotdevin Jan 7, 2026
4e5b0b0
fix(app): session navigation with shortcuts
adamdotdevin Jan 7, 2026
9a3bd0a
fix(app): hide line numbers in diffs on mobile
adamdotdevin Jan 7, 2026
5168988
chore: generate
actions-user Jan 7, 2026
d7afb01
Update Nix flake.lock and hashes
actions-user Jan 7, 2026
dadc08d
fix: escape backticks when passing to powershell (#7157)
NSPC911 Jan 7, 2026
761863a
chore(app): rework storage approach
adamdotdevin Jan 7, 2026
f6055ad
chore: fix types
adamdotdevin Jan 7, 2026
eaa0826
chore: generate
actions-user Jan 7, 2026
fd7b7ea
Added: Ability to hide subagents from primary agents system prompt. (…
Sewer56 Jan 7, 2026
939c094
chore: generate
actions-user Jan 7, 2026
22b058a
wip: black
fwang Jan 7, 2026
23fc675
wip: black
fwang Jan 7, 2026
31dd9fd
chore: generate
actions-user Jan 7, 2026
5d0007a
wip: black
fwang Jan 7, 2026
37decee
use custom tauri-cli on linux
Brendonovich Jan 7, 2026
85ed329
add agent color to inline task tool ascii char and highlight agent n…
spoons-and-mirrors Jan 7, 2026
61c334f
desktop: use regular tauri cli again
Brendonovich Jan 7, 2026
04cea9c
tweak: unserializable error handling
rekram1-node Jan 7, 2026
79f6910
desktop: use correct tauri-cli branch
Brendonovich Jan 7, 2026
a8c2928
perf: show window immediately during desktop startup (#6734)
usvimal Jan 7, 2026
0021a09
try using forked tauri-cli again
Brendonovich Jan 7, 2026
b5be883
Make General SubAgent not hidden (#6752)
dbpolito Jan 7, 2026
6bac501
add ui package to desktop
Brendonovich Jan 7, 2026
a0dc90b
Update Nix flake.lock and hashes
actions-user Jan 7, 2026
429240f
ignore: add truncation funcs (#7178)
rekram1-node Jan 7, 2026
c961072
chore: generate
actions-user Jan 7, 2026
e91cc7e
wip: black
fwang Jan 7, 2026
ce4e595
wip: black
fwang Jan 7, 2026
0ffe496
chore: generate
actions-user Jan 7, 2026
6590c16
add truncation for all tools
rekram1-node Jan 7, 2026
3c375b9
desktop: use Show instead of Suspense
Brendonovich Jan 7, 2026
cbf87c5
chore: generate
actions-user Jan 7, 2026
2b7a021
desktop: appimage bundleMediaFramework
Brendonovich Jan 7, 2026
24c933a
Add audio input and camera permissions to entitlements (#7117)
saeedvaziry Jan 7, 2026
270cd05
fix entitlements
Brendonovich Jan 7, 2026
4f7458b
ignore: update download stats 2026-01-07
actions-user Jan 7, 2026
19d2a38
feat(async-agents): implement fire-and-forget subagent tasks with tas…
Jan 7, 2026
4b4d5b0
fix(async-agents): guard async task notifications
Jan 7, 2026
70574fe
fix(tui): hide prompt in subagent sessions
Jan 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# web + desktop packages
packages/app/ @adamdotdevin
packages/tauri/ @adamdotdevin
packages/desktop/ @adamdotdevin
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/bug-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,14 @@ body:
validations:
required: true

- type: input
id: plugins
attributes:
label: Plugins
description: What plugins are you using?
validations:
required: false

- type: input
id: opencode-version
attributes:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/duplicate-issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ jobs:
OPENCODE_PERMISSION: |
{
"bash": {
"gh issue*": "allow",
"*": "deny"
"*": "deny",
"gh issue*": "allow"
},
"webfetch": "deny"
}
Expand Down
65 changes: 65 additions & 0 deletions .github/workflows/duplicate-prs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Duplicate PR Check

on:
pull_request_target:
types: [opened]

jobs:
check-duplicates:
if: |
github.event.pull_request.user.login != 'actions-user' &&
github.event.pull_request.user.login != 'opencode' &&
github.event.pull_request.user.login != 'rekram1-node' &&
github.event.pull_request.user.login != 'thdxr' &&
github.event.pull_request.user.login != 'kommander' &&
github.event.pull_request.user.login != 'jayair' &&
github.event.pull_request.user.login != 'fwang' &&
github.event.pull_request.user.login != 'adamdotdevin' &&
github.event.pull_request.user.login != 'iamdavidhill' &&
github.event.pull_request.user.login != 'opencode-agent[bot]'
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Setup Bun
uses: ./.github/actions/setup-bun

- name: Install dependencies
run: bun install

- name: Install opencode
run: curl -fsSL https://opencode.ai/install | bash

- name: Build prompt
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
run: |
{
echo "Check for duplicate PRs related to this new PR:"
echo ""
echo "CURRENT_PR_NUMBER: $PR_NUMBER"
echo ""
echo "Title: $(gh pr view "$PR_NUMBER" --json title --jq .title)"
echo ""
echo "Description:"
gh pr view "$PR_NUMBER" --json body --jq .body
} > pr_info.txt

- name: Check for duplicate PRs
env:
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
run: |
COMMENT=$(bun script/duplicate-pr.ts -f pr_info.txt "Check the attached file for PR details and search for duplicates")

gh pr comment "$PR_NUMBER" --body "_The following comment was made by an LLM, it may be inaccurate:_

$COMMENT"
35 changes: 35 additions & 0 deletions .github/workflows/nix-desktop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: nix desktop

on:
push:
branches: [dev]
paths:
- "flake.nix"
- "flake.lock"
- "nix/**"
- "packages/app/**"
- "packages/desktop/**"
workflow_dispatch:

jobs:
build-desktop:
strategy:
fail-fast: false
matrix:
os:
- blacksmith-4vcpu-ubuntu-2404
- macos-latest
runs-on: ${{ matrix.os }}
timeout-minutes: 60
steps:
- name: Checkout repository
uses: actions/checkout@v6

- name: Setup Nix
uses: DeterminateSystems/nix-installer-action@v21

- name: Build desktop via flake
run: |
set -euo pipefail
nix --version
nix build .#desktop -L
5 changes: 3 additions & 2 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ permissions:
jobs:
publish:
runs-on: blacksmith-4vcpu-ubuntu-2404
if: github.repository == 'sst/opencode'
if: github.repository == 'anomalyco/opencode'
steps:
- uses: actions/checkout@v3
with:
Expand Down Expand Up @@ -172,7 +172,8 @@ jobs:
- name: Install tauri-cli from portable appimage branch
if: contains(matrix.settings.host, 'ubuntu')
run: |
cargo install tauri-cli --git https://github.com/tauri-apps/tauri --branch feat/truly-portable-appimage --force
# cargo install tauri-cli --git https://github.com/tauri-apps/tauri --branch feat/truly-portable-appimage --force
cargo install tauri-cli --git https://github.com/brendonovich/tauri --branch appimage-sidecar-binaries --force
echo "Installed tauri-cli version:"
cargo tauri --version

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OPENCODE_PERMISSION: '{ "bash": { "gh*": "allow", "gh pr review*": "deny", "*": "deny" } }'
OPENCODE_PERMISSION: '{ "bash": { "*": "deny", "gh*": "allow", "gh pr review*": "deny" } }'
PR_TITLE: ${{ steps.pr-details.outputs.title }}
run: |
PR_BODY=$(jq -r .body pr_data.json)
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/stats.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ concurrency: ${{ github.workflow }}-${{ github.ref }}

jobs:
stats:
if: github.repository == 'sst/opencode'
if: github.repository == 'anomalyco/opencode'
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
contents: write
Expand Down
26 changes: 26 additions & 0 deletions .opencode/agent/duplicate-pr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
mode: primary
hidden: true
model: opencode/claude-haiku-4-5
color: "#E67E22"
tools:
"*": false
"github-pr-search": true
---

You are a duplicate PR detection agent. When a PR is opened, your job is to search for potentially duplicate or related open PRs.

Use the github-pr-search tool to search for PRs that might be addressing the same issue or feature.

IMPORTANT: The input will contain a line `CURRENT_PR_NUMBER: NNNN`. This is the current PR number, you should not mark that the current PR as a duplicate of itself.

Search using keywords from the PR title and description. Try multiple searches with different relevant terms.

If you find potential duplicates:

- List them with their titles and URLs
- Briefly explain why they might be related

If no duplicates are found, say so clearly. BUT ONLY SAY "No duplicate PRs found" (don't say anything else if no dups)

Keep your response concise and actionable.
2 changes: 1 addition & 1 deletion .opencode/command/issues.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ description: "find issue(s) on github"
model: opencode/claude-haiku-4-5
---

Search through existing issues in sst/opencode using the gh cli to find issues matching this query:
Search through existing issues in anomalyco/opencode using the gh cli to find issues matching this query:

$ARGUMENTS

Expand Down
6 changes: 1 addition & 5 deletions .opencode/opencode.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,6 @@
"options": {},
},
},
"permission": {
"bash": {
"ls foo": "ask",
},
},
"mcp": {
"context7": {
"type": "remote",
Expand All @@ -23,5 +18,6 @@
},
"tools": {
"github-triage": false,
"github-pr-search": false,
},
}
57 changes: 57 additions & 0 deletions .opencode/tool/github-pr-search.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/// <reference path="../env.d.ts" />
import { tool } from "@opencode-ai/plugin"
import DESCRIPTION from "./github-pr-search.txt"

async function githubFetch(endpoint: string, options: RequestInit = {}) {
const response = await fetch(`https://api.github.com${endpoint}`, {
...options,
headers: {
Authorization: `Bearer ${process.env.GITHUB_TOKEN}`,
Accept: "application/vnd.github+json",
"Content-Type": "application/json",
...options.headers,
},
})
if (!response.ok) {
throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
}
return response.json()
}

interface PR {
title: string
html_url: string
}

export default tool({
description: DESCRIPTION,
args: {
query: tool.schema.string().describe("Search query for PR titles and descriptions"),
limit: tool.schema.number().describe("Maximum number of results to return").default(10),
offset: tool.schema.number().describe("Number of results to skip for pagination").default(0),
},
async execute(args) {
const owner = "anomalyco"
const repo = "opencode"

const page = Math.floor(args.offset / args.limit) + 1
const searchQuery = encodeURIComponent(`${args.query} repo:${owner}/${repo} type:pr state:open`)
const result = await githubFetch(
`/search/issues?q=${searchQuery}&per_page=${args.limit}&page=${page}&sort=updated&order=desc`,
)

if (result.total_count === 0) {
return `No PRs found matching "${args.query}"`
}

const prs = result.items as PR[]

if (prs.length === 0) {
return `No other PRs found matching "${args.query}"`
}

const formatted = prs.map((pr) => `${pr.title}\n${pr.html_url}`).join("\n\n")

return `Found ${result.total_count} PRs (showing ${prs.length}):\n\n${formatted}`
},
})
10 changes: 10 additions & 0 deletions .opencode/tool/github-pr-search.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Use this tool to search GitHub pull requests by title and description.

This tool searches PRs in the sst/opencode repository and returns LLM-friendly results including:
- PR number and title
- Author
- State (open/closed/merged)
- Labels
- Description snippet

Use the query parameter to search for keywords that might appear in PR titles or descriptions.
2 changes: 1 addition & 1 deletion .opencode/tool/github-triage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export default tool({
async execute(args) {
const issue = getIssueNumber()
// const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN })
const owner = "sst"
const owner = "anomalyco"
const repo = "opencode"

const results: string[] = []
Expand Down
41 changes: 41 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,49 @@ Replace `<platform>` with your platform (e.g., `darwin-arm64`, `linux-x64`).
- Core pieces:
- `packages/opencode`: OpenCode core business logic & server.
- `packages/opencode/src/cli/cmd/tui/`: The TUI code, written in SolidJS with [opentui](https://github.com/sst/opentui)
- `packages/app`: The shared web UI components, written in SolidJS
- `packages/desktop`: The native desktop app, built with Tauri (wraps `packages/app`)
- `packages/plugin`: Source for `@opencode-ai/plugin`

### Running the Web App

To test UI changes during development, run the web app:

```bash
bun run --cwd packages/app dev
```

This starts a local dev server at http://localhost:5173 (or similar port shown in output). Most UI changes can be tested here.

### Running the Desktop App

The desktop app is a native Tauri application that wraps the web UI.

To run the native desktop app:

```bash
bun run --cwd packages/desktop tauri dev
```

This starts the web dev server on http://localhost:1420 and opens the native window.

If you only want the web dev server (no native shell):

```bash
bun run --cwd packages/desktop dev
```

To create a production `dist/` and build the native app bundle:

```bash
bun run --cwd packages/desktop tauri build
```

This runs `bun run --cwd packages/desktop build` automatically via Tauri’s `beforeBuildCommand`.

> [!NOTE]
> Running the desktop app requires additional Tauri dependencies (Rust toolchain, platform-specific libraries). See the [Tauri prerequisites](https://v2.tauri.app/start/prerequisites/) for setup instructions.

> [!NOTE]
> If you make changes to the API or SDK (e.g. `packages/opencode/src/server/server.ts`), run `./script/generate.ts` to regenerate the SDK and related files.

Expand Down
7 changes: 1 addition & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,7 @@ XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/install | bash

### Agents

OpenCode includes two built-in agents you can switch between,
you can switch between these using the `Tab` key.
OpenCode includes two built-in agents you can switch between with the `Tab` key.

- **build** - Default, full access agent for development work
- **plan** - Read-only agent for analysis and code exploration
Expand Down Expand Up @@ -108,10 +107,6 @@ It's very similar to Claude Code in terms of capability. Here are the key differ
- A focus on TUI. OpenCode is built by neovim users and the creators of [terminal.shop](https://terminal.shop); we are going to push the limits of what's possible in the terminal.
- A client/server architecture. This for example can allow OpenCode to run on your computer, while you can drive it remotely from a mobile app. Meaning that the TUI frontend is just one of the possible clients.

#### What's the other repo?

The other confusingly named repo has no relation to this one. You can [read the story behind it here](https://x.com/thdxr/status/1933561254481666466).

---

**Join our community** [Discord](https://discord.gg/opencode) | [X.com](https://x.com/opencode)
Loading
Loading