Skip to content

Commit f74dafd

Browse files
authored
Upgrade to upstream GSD v1.35.0 (#105)
* Add regex-based forbidden string matching to antipattern checker * Sync from upstream GSD v1.35.0 with OpenCode translations - Copy 289 files from submodule (v1.35.0) - Replace 66 Task() calls with @subagent_type shorthand - Add mode: subagent to 29 agent definition files - Apply 5,144 Claude Code -> OpenCode translations across 287 files - Pass forbidden strings validation with zero violations * Wrap gsd-intel command in objective/process XML blocks * Add CHANGELOG entry for v1.35.0 sync and update README
1 parent 96bad30 commit f74dafd

132 files changed

Lines changed: 11979 additions & 765 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,59 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.35.0] - 2026-04-13
9+
10+
Overview: Major upstream sync from GSD v1.35.0 introducing code review pipeline with auto-fix loop, codebase intelligence system, explore/scan/explore workflows, AI integration phase, import workflow, eval review, undo, and inbox management. Added 8 new agents, 9 new commands, and 14 new reference documents. Converted all Task() calls to @subagent_type shorthand and added mode: subagent to all agent definitions.
11+
12+
### Added
13+
14+
- `gsd-code-reviewer` agent for deep code review with configurable depth and finding categorization in `gsd-opencode/agents/gsd-code-reviewer.md`
15+
- `gsd-code-fixer` agent for automated fix application from review findings with iterative review-fix loop in `gsd-opencode/agents/gsd-code-fixer.md`
16+
- `gsd-ai-researcher` agent for AI-specific research tasks in `gsd-opencode/agents/gsd-ai-researcher.md`
17+
- `gsd-domain-researcher` agent for domain-specific research in `gsd-opencode/agents/gsd-domain-researcher.md`
18+
- `gsd-eval-auditor` agent for evaluation auditing in `gsd-opencode/agents/gsd-eval-auditor.md`
19+
- `gsd-eval-planner` agent for evaluation planning in `gsd-opencode/agents/gsd-eval-planner.md`
20+
- `gsd-framework-selector` agent for framework selection guidance in `gsd-opencode/agents/gsd-framework-selector.md`
21+
- `gsd-intel-updater` agent for codebase intelligence file refresh in `gsd-opencode/agents/gsd-intel-updater.md`
22+
- `/gsd-code-review` command and `code-review` workflow for automated code review at configurable depth in `gsd-opencode/commands/gsd/gsd-code-review.md` and `gsd-opencode/get-shit-done/workflows/code-review.md`
23+
- `/gsd-code-review-fix` command and `code-review-fix` workflow for iterative auto-fix of review findings with convergence detection in `gsd-opencode/commands/gsd/gsd-code-review-fix.md` and `gsd-opencode/get-shit-done/workflows/code-review-fix.md`
24+
- `/gsd-intel` command for querying, inspecting, and refreshing codebase intelligence files in `gsd-opencode/commands/gsd/gsd-intel.md`
25+
- `/gsd-explore` command and `explore` workflow for interactive codebase exploration with optional research agent spawning in `gsd-opencode/commands/gsd/gsd-explore.md` and `gsd-opencode/get-shit-done/workflows/explore.md`
26+
- `/gsd-scan` command and `scan` workflow for focused codebase scanning with parallel mapper agents in `gsd-opencode/commands/gsd/gsd-scan.md` and `gsd-opencode/get-shit-done/workflows/scan.md`
27+
- `/gsd-import` command and `import` workflow for importing existing projects into GSD structure with plan validation in `gsd-opencode/commands/gsd/gsd-import.md` and `gsd-opencode/get-shit-done/workflows/import.md`
28+
- `/gsd-audit-fix` command and `audit-fix` workflow for auto-fixing audit findings with test verification in `gsd-opencode/commands/gsd/gsd-audit-fix.md` and `gsd-opencode/get-shit-done/workflows/audit-fix.md`
29+
- `/gsd-ai-integration-phase` command and `ai-integration-phase` workflow for AI integration phases in `gsd-opencode/commands/gsd/gsd-ai-integration-phase.md` and `gsd-opencode/get-shit-done/workflows/ai-integration-phase.md`
30+
- `/gsd-eval-review` command and `eval-review` workflow for evaluation review in `gsd-opencode/commands/gsd/gsd-eval-review.md` and `gsd-opencode/get-shit-done/workflows/eval-review.md`
31+
- `/gsd-undo` command and `undo` workflow for undoing recent GSD operations with git-based rollback in `gsd-opencode/commands/gsd/gsd-undo.md` and `gsd-opencode/get-shit-done/workflows/undo.md`
32+
- `/gsd-from-gsd2` command for migrating from GSD v2 format in `gsd-opencode/commands/gsd/gsd-from-gsd2.md`
33+
- `inbox` workflow for managing development inbox in `gsd-opencode/get-shit-done/workflows/inbox.md`
34+
- `intel.cjs` library for codebase intelligence management (extract-exports, patch-meta, validate, status) in `gsd-opencode/get-shit-done/bin/lib/intel.cjs`
35+
- `learnings.cjs` library for learning capture and retrieval in `gsd-opencode/get-shit-done/bin/lib/learnings.cjs`
36+
- `gsd2-import.cjs` library for GSD v2 project migration in `gsd-opencode/get-shit-done/bin/lib/gsd2-import.cjs`
37+
- `AI-SPEC.md` template for AI integration specifications in `gsd-opencode/get-shit-done/templates/AI-SPEC.md`
38+
- `gsd-code-review` and `gsd-code-review-fix` skills for OpenCode integration in `gsd-opencode/skills/`
39+
- 14 new reference documents: `ai-evals.md`, `ai-frameworks.md`, `common-bug-patterns.md`, `gates.md`, `ios-scaffold.md`, `thinking-models-debug.md`, `thinking-models-execution.md`, `thinking-models-planning.md`, `thinking-models-research.md`, `thinking-models-verification.md`, `thinking-partner.md`, `verification-overrides.md`, and few-shot examples for `plan-checker.md` and `verifier.md` in `gsd-opencode/get-shit-done/references/`
40+
- Regex-based forbidden string matching to antipatterns checker in `assets/bin/check-forbidden-strings.js`
41+
- `task(\n` regexp pattern to antipatterns list in `assets/antipatterns.toml` for detecting unconverted Task() calls
42+
43+
### Changed
44+
45+
- Synced 289 files from upstream GSD submodule at v1.35.0
46+
- Converted all 66 Task() function calls to @subagent_type shorthand syntax across workflows, commands, templates, and references
47+
- Added `mode: subagent` declaration to all 29 agent definition files in `gsd-opencode/agents/`
48+
- Applied 5,144 Claude Code to OpenCode translations across 287 files (paths, tool names, commands, URLs, HTML tags)
49+
- Enhanced `execute-phase` workflow with expanded executor agent prompts, worktree branch check improvements, and verifier agent integration in `gsd-opencode/get-shit-done/workflows/execute-phase.md`
50+
- Enhanced `plan-phase` workflow with additional planner and plan-checker context in `gsd-opencode/get-shit-done/workflows/plan-phase.md`
51+
- Enhanced `quick` workflow with executor worktree support, code review, and verification integration in `gsd-opencode/get-shit-done/workflows/quick.md`
52+
- Enhanced `manager` workflow with plan-phase and execute-phase background agent delegation in `gsd-opencode/get-shit-done/workflows/manager.md`
53+
- Enhanced `autonomous` workflow with agent tracking and dispatch patterns in `gsd-opencode/get-shit-done/workflows/autonomous.md`
54+
- Updated `gsd-tools.cjs` with new commands and enhanced CLI tooling in `gsd-opencode/get-shit-done/bin/gsd-tools.cjs`
55+
- Refactored `state.cjs` with improved state management in `gsd-opencode/get-shit-done/bin/lib/state.cjs`
56+
- Enhanced `phase.cjs` with expanded phase management capabilities in `gsd-opencode/get-shit-done/bin/lib/phase.cjs`
57+
- Updated `model-profiles.md` and `model-profile-resolution.md` references to use @subagent syntax in `gsd-opencode/get-shit-done/references/`
58+
- Expanded `planning-config.md` reference with detailed configuration documentation in `gsd-opencode/get-shit-done/references/planning-config.md`
59+
- Updated documentation (ARCHITECTURE, COMMANDS, CONFIGURATION, FEATURES, USER-GUIDE) to reflect new commands, agents, and workflows in `gsd-opencode/docs/`
60+
861
## [1.33.3] - 2026-04-12
962

1063
Overview: Fixed YAML frontmatter parse errors across 11 command files by quoting unquoted argument-hint values, corrected malformed skill permission in gsd-manager, and updated translation config with new rules for skill permissions and argument-hint quoting.

README.md

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<div align="left">
22

3-
# GET SHIT DONE for OpenCode. (Based on TÂCHES v1.33.0 - 2026-04-04)
3+
# GET SHIT DONE for OpenCode. (Based on TÂCHES v1.35.0 - 2026-04-10)
44

55
**A light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TÂCHES. (Adapted for OpenCode by rokicool and enthusiasts)**
66

@@ -13,16 +13,17 @@
1313

1414
---
1515

16-
# (Un)Breaking news
16+
# Explanation
1717

18-
TACHES decided to include support for OpenCode in his own product. That is great news.
18+
Original Get-Shit-Done (GSDv1) started supporting OpenCode about 2.5 months ago. That was great, but since I started working on this project earlier, I found a lot of roughnesses in the original GSD for OpenCode. So I decided to continue working on this port.
1919

20-
However, with all due respect, his adaptation for OpenCode is not perfect. So I will continue working on this project and will try to fill the gaps.
20+
Despite being 'direct port' with straightforward code adaptation we added some specific features.
2121

22-
Thanks to [@dpearson2699](https://github.com/dpearson2699) we have much better adaptation of /gsd-settings command and (almost)dynamical switch between different LLMs for subagents.
22+
Thanks to [@dpearson2699](https://github.com/dpearson2699) for the initial version and idea of Profile system. I modified it later and belive our system (`/gsd-set-profile`) is much more suitable and simpler to use than the original, based on Claude Code concept of 'Three levels of models'.
2323

24+
I am not going to give up on this project yet, but to be honest, it makes less and less sence.
2425

25-
-- **Roman** (2026-01-31)
26+
-- **Roman** (2026-04-13)
2627

2728

2829
[![IMAGE ALT TEXT HERE](https://img.youtube.com/vi/zRJ0UWHBjCY/0.jpg)](https://www.youtube.com/watch?v=zRJ0UWHBjCY)
@@ -87,6 +88,10 @@ I just love both GSD and OpenCode. I felt like having GSD available only for Cla
8788

8889
**Roman**
8990

91+
## Version 1.35.0
92+
93+
Bumping up the version to keep up with the original GSDv1 [v1.35.0](https://github.com/gsd-build/get-shit-done/releases/tag/v1.35.0)
94+
9095
## Version 1.33.2
9196

9297
Added support for translating `Agent()` background task calls to OpenCode-compatible `@gsd-<agent>` shorthand syntax. The new translation rule 21 in `assets/configs/remove-task.json` dynamically extracts agent names from `skill="gsd-<agent>"` patterns and converts them to the OpenCode format. This update fixes two `Agent()` calls in `autonomous.md` workflow for plan and execute phase dispatch, ensuring full OpenCode compatibility.

assets/antipatterns.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,6 @@ forbidden_strings = [
3636
'gsd:update\\|GSD update\\|gsd-install',
3737
'model: haiku'
3838
]
39+
forbidden_regexp_strings = [
40+
'task\(\n'
41+
]

assets/bin/check-forbidden-strings.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,12 +202,14 @@ function main() {
202202
checklist.exclude_dir.split(',').map(d => d.trim()).filter(d => d)) :
203203
[];
204204
const forbiddenStrings = checklist.forbidden_strings || [];
205+
const forbiddenRegexpStrings = checklist.forbidden_regexp_strings || [];
205206

206207
console.log('🔍 Checking forbidden strings from antipatterns.toml...');
207208
console.log(`📁 Scanning folder: ${folder}`);
208209
console.log(`📄 File pattern: ${filePattern}`);
209210
console.log(`🚫 Exclude dirs: ${excludeDirs.join(', ') || 'none'}`);
210211
console.log(`⚠️ Forbidden strings: ${forbiddenStrings.length} strings to check`);
212+
console.log(`⚠️ Forbidden regexp strings: ${forbiddenRegexpStrings.length} patterns to check`);
211213
console.log('');
212214

213215
const files = findFiles(folder, filePattern, excludeDirs);
@@ -235,6 +237,27 @@ function main() {
235237
}
236238
}
237239
}
240+
241+
for (const regexpString of forbiddenRegexpStrings) {
242+
try {
243+
const regex = new RegExp(regexpString, 'g');
244+
let match;
245+
while ((match = regex.exec(content)) !== null) {
246+
const lineNumber = content.substring(0, match.index).split('\n').length;
247+
const matchedLine = lines[lineNumber - 1] || '';
248+
violations.push({
249+
file: file,
250+
line: lineNumber,
251+
string: `/${regexpString}/`,
252+
content: matchedLine.trim()
253+
});
254+
violationsFound = true;
255+
if (match[0].length === 0) regex.lastIndex++;
256+
}
257+
} catch (error) {
258+
console.error(`⚠️ Invalid regex pattern "/${regexpString}/": ${error.message}`);
259+
}
260+
}
238261
} catch (error) {
239262
console.error(`⚠️ Could not read file ${file}: ${error.message}`);
240263
}

assets/configs/remove-task.json

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
"gsd-opencode/commands/gsd/**",
88
"gsd-opencode/get-shit-done/references/**",
99
"gsd-opencode/get-shit-done/templates/**",
10-
"gsd-opencode/get-shit-done/workflows/**"
10+
"gsd-opencode/get-shit-done/workflows/**",
11+
"gsd-opencode/docs/**"
1112
],
1213
"exclude": [
1314
"node_modules/**",
@@ -186,12 +187,12 @@
186187
"description": "Replace prose 'spawn a task() in parallel' with @subagent reference"
187188
},
188189
{
189-
"_comment": "18. task() with subagent_type=\"general\" referencing gsd-advisor-researcher → @gsd-advisor-researcher",
190-
"pattern": "task\\(\\s*\\r?\\n\\s*prompt=\"(First, read @[\\s\\S]*?\\$\\{AGENT_SKILLS_ADVISOR\\})\",\\s*\\r?\\n\\s*subagent_type=\"general\",\\s*\\r?\\n\\s*model=\"[^\"]*\",\\s*\\r?\\n\\s*description=\"[^\"]*\"\\s*\\r?\\n\\s*\\)",
190+
"_comment": "18. task() with subagent_type=\"general\" referencing gsd-advisor-researcher → @gsd-advisor-researcher (strip preamble, keep body from <gray_area>)",
191+
"pattern": "task\\(\\s*\\r?\\n\\s*prompt=\"First, read @[^\\n]*gsd-advisor-researcher\\.md[^\\n]*\\.\\s*\\n\\s*\\n(\\s*<gray_area>[\\s\\S]*?\\$\\{AGENT_SKILLS_ADVISOR\\})\",\\s*\\r?\\n\\s*subagent_type=\"general\",\\s*\\r?\\n\\s*model=\"[^\"]*\",\\s*\\r?\\n\\s*description=\"[^\"]*\"\\s*\\r?\\n\\s*\\)",
191192
"replacement": "@gsd-advisor-researcher \"$1\"",
192193
"isRegex": true,
193194
"caseSensitive": true,
194-
"description": "Replace task(subagent_type=general) with gsd-advisor-researcher prompt to @gsd-advisor-researcher shorthand"
195+
"description": "Replace task(subagent_type=general) advisor-researcher: strip preamble, keep body from <gray_area> onward"
195196
},
196197
{
197198
"_comment": "19. Prose: 'All task() calls spawn simultaneously' → subagent reference",
@@ -216,6 +217,38 @@
216217
"isRegex": true,
217218
"caseSensitive": true,
218219
"description": "Replace Agent() with gsd skill reference to @gsd-xxx shorthand, extracting agent name from skill=\"gsd:xxx\" and converting to gsd-xxx"
220+
},
221+
{
222+
"_comment": "22. Multiline task() with description first, then multiline prompt, no subagent_type (gsd-intel pattern)",
223+
"pattern": "task\\(\\s*\\n\\s*description=\"[^\"]*\",\\s*\\n\\s*prompt=\"([\\s\\S]*?)\"\\s*\\n\\s*\\)",
224+
"replacement": "@general \"$1\"",
225+
"isRegex": true,
226+
"caseSensitive": true,
227+
"description": "Replace task() with description + multiline prompt (no subagent_type) to @general shorthand"
228+
},
229+
{
230+
"_comment": "23. Multiline task() with prompt, subagent_type, model with trailing comment (zh-CN example pattern)",
231+
"pattern": "task\\(\\s*\\n\\s*prompt=\"([^\"]*)\",\\s*\\n\\s*subagent_type=\"(gsd-[^\"]+)\",\\s*\\n\\s*model=\"[^\"]*\"[^\\n]*\\n\\s*\\)",
232+
"replacement": "@$2 \"$1\"",
233+
"isRegex": true,
234+
"caseSensitive": true,
235+
"description": "Replace task() with prompt, subagent_type, model (with optional trailing comment) to @subagent shorthand"
236+
},
237+
{
238+
"_comment": "24. Multiline task() with description, run_in_background=true, then multiline prompt (manager.md pattern)",
239+
"pattern": "task\\(\\s*\\n\\s*description=\"[^\"]*\",\\s*\\n\\s*run_in_background=true,\\s*\\n\\s*prompt=\"([\\s\\S]*?)\"\\s*\\n\\s*\\)",
240+
"replacement": "@general \"$1\"",
241+
"isRegex": true,
242+
"caseSensitive": true,
243+
"description": "Replace task() with description + run_in_background + multiline prompt to @general shorthand"
244+
},
245+
{
246+
"_comment": "25. simple string with task() ",
247+
"pattern": "All task() calls spawn simultaneously",
248+
"replacement": "All subagents spawn simultaneously",
249+
"isRegex": false,
250+
"caseSensitive": false,
251+
"description": "Replace string with task()"
219252
}
220253
]
221254
}

gsd-opencode/agents/gsd-advisor-researcher.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,29 @@ Spawned by `discuss-phase` via `task()`. You do NOT present output directly to t
2525
- Return structured markdown output for the main agent to synthesize
2626
</role>
2727

28+
<documentation_lookup>
29+
When you need library or framework documentation, check in this order:
30+
31+
1. If Context7 MCP tools (`mcp__context7__*`) are available in your environment, use them:
32+
- Resolve library ID: `mcp__context7__resolve-library-id` with `libraryName`
33+
- Fetch docs: `mcp__context7__get-library-docs` with `context7CompatibleLibraryId` and `topic`
34+
35+
2. If Context7 MCP is not available (upstream bug anthropics/OpenCode-code#13898 strips MCP
36+
tools from agents with a `tools:` frontmatter restriction), use the CLI fallback via bash:
37+
38+
Step 1 — Resolve library ID:
39+
```bash
40+
npx --yes ctx7@latest library <name> "<query>"
41+
```
42+
Step 2 — Fetch documentation:
43+
```bash
44+
npx --yes ctx7@latest docs <libraryId> "<query>"
45+
```
46+
47+
Do not skip documentation lookups because MCP tools are unavailable — the CLI fallback
48+
works via bash and produces equivalent output.
49+
</documentation_lookup>
50+
2851
<input>
2952
Agent receives via prompt:
3053

0 commit comments

Comments
 (0)