Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
52 changes: 52 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,58 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.22.2] - 2026-03-30

Overview: Major upstream sync from GSD v1.30.0 adding autonomous execution, fast mode, UI design pipeline, multi-project workspaces, user profiling, forensics, and 25 new slash commands. Full documentation now available in four additional locales (ja-JP, ko-KR, pt-BR, zh-CN). Added `mode: subagent` declarations to all agent definition files.

### Added

- `/gsd-autonomous` command and `autonomous` workflow for end-to-end autonomous project execution
- `/gsd-fast` command and `fast` workflow for rapid-fire task execution
- `/gsd-do` command and `do` workflow for direct task execution without full planning
- `/gsd-forensics` command and `forensics` workflow for post-mortem investigation and debugging
- `/gsd-thread` command for threaded conversation management
- `/gsd-workstreams` command and `workstream.cjs` library for multi-stream work management with `--workstream` flag
- `/gsd-profile-user` command, `profile-user` workflow, `gsd-user-profiler` agent, `profile-pipeline.cjs`, and `profile-output.cjs` for building and maintaining user preference profiles
- `/gsd-ui-phase` command, `ui-phase` workflow, `gsd-ui-researcher` agent, `gsd-ui-auditor` agent, `gsd-ui-checker` agent for complete UI design and review pipeline
- `/gsd-ui-review` command and `ui-review` workflow for retroactive UI audits
- `/gsd-ship` command and `ship` workflow for streamlined shipping and release
- `/gsd-pr-branch` command and `pr-branch` workflow for PR branch creation and management
- `/gsd-manager` command and `manager` workflow for manager-level project oversight
- `/gsd-session-report` command and `session-report` workflow for session summary generation
- `/gsd-stats` command and `stats` workflow for project and milestone statistics
- `/gsd-note` command and `note` workflow for quick note-taking during work
- `/gsd-add-backlog` and `/gsd-review-backlog` commands for backlog item management
- `/gsd-milestone-summary` command and `milestone-summary` workflow for milestone overview generation
- `/gsd-new-workspace`, `/gsd-list-workspaces`, and `/gsd-remove-workspace` commands and workflows for multi-project workspace management
- `/gsd-next` command and `next` workflow for determining and starting the next task
- `/gsd-plant-seed` command and `plant-seed` workflow for seeding new project ideas
- `/gsd-audit-uat` command, `audit-uat` workflow, and `uat.cjs` library for user acceptance testing audits
- `/gsd-review` command and `review` workflow for structured code review
- `gsd-advisor-researcher` agent for researching gray area decisions with comparison tables
- `gsd-assumptions-analyzer` agent and `discuss-phase-assumptions` workflow for assumption analysis during discuss phase
- `model-profiles.cjs` library for model profile definitions
- `security.cjs` library for security utility functions
- `node-repair` workflow for automated Node.js dependency repair
- `UI-SPEC.md`, `claude-md.md`, `dev-preferences.md`, `discussion-log.md`, and `user-profile.md` templates
- `user-profiling.md` and `workstream-flag.md` reference documentation
- `superpowers/plans/2026-03-18-materialize-new-project-config.md` and `superpowers/specs/2026-03-20-multi-project-workspaces-design.md` design documents
- Skill definitions (SKILL.md) for gsd-audit-milestone, gsd-cleanup, gsd-complete-milestone, gsd-discuss-phase, gsd-execute-phase, gsd-plan-phase, gsd-ui-phase, gsd-ui-review, and gsd-verify-work
- `mode: subagent` declarations added to all 18 agent definition files in `gsd-opencode/agents/`
- Full Japanese (ja-JP) documentation: AGENTS, ARCHITECTURE, CLI-TOOLS, COMMANDS, CONFIGURATION, FEATURES, README, USER-GUIDE, context-monitor, and workflow-discuss-mode
- Full Korean (ko-KR) documentation: AGENTS, ARCHITECTURE, CLI-TOOLS, COMMANDS, CONFIGURATION, FEATURES, README, USER-GUIDE, context-monitor, and workflow-discuss-mode
- Brazilian Portuguese (pt-BR) documentation: AGENTS, ARCHITECTURE, CLI-TOOLS, COMMANDS, CONFIGURATION, FEATURES, README, USER-GUIDE, context-monitor, and workflow-discuss-mode
- Simplified Chinese (zh-CN) documentation: README, USER-GUIDE, and full references subdirectory (checkpoints, continuation-format, decimal-phase-calculation, git-integration, git-planning-commit, model-profile-resolution, model-profiles, phase-argument-parsing, planning-config, questioning, tdd, ui-brand, verification-patterns)

### Changed

- Updated 12 existing agents (codebase-mapper, debugger, executor, integration-checker, nyquist-auditor, phase-researcher, plan-checker, planner, project-researcher, research-synthesizer, roadmapper, verifier) with improved behavior
- Enhanced 8 existing commands (discuss-phase, execute-phase, plan-phase, research-phase, debug, quick, reapply-patches, set-profile)
- Improved 30 existing workflows including execute-phase, plan-phase, discuss-phase, new-project, new-milestone, health, help, settings, and update
- Updated 12 CLI library modules (commands, config, core, frontmatter, init, milestone, phase, roadmap, state, template, verify, gsd-tools) for v1.30.0 compatibility
- Modified templates: config.json, context.md, phase-prompt.md, project.md, and UAT.md
- Updated 7 reference documents: checkpoints, decimal-phase-calculation, git-integration, model-profile-resolution, model-profiles, phase-argument-parsing, and planning-config

## [1.22.0] - 2026-03-08

Overview: Synchronized with upstream GSD v1.22.4 to fix agent execution syntax and prevent unexpected stops. Simplified model profile system from quality/balanced/budget to simple/smart/genius with updated configuration file structure. Enhanced copy and translate services for upstream synchronization.
Expand Down
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<div align="left">

# GET SHIT DONE for OpenCode. (Based on TÂCHES v1.22.4 - 2026-03-03)
# GET SHIT DONE for OpenCode. (Based on TÂCHES v1.30.0 - 2026-03-30)

**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)**

Expand Down Expand Up @@ -87,6 +87,12 @@ I just love both GSD and OpenCode. I felt like having GSD available only for Cla

— **Roman**

## Version 1.30.0

We are keeping up with original GSDv1 v1.30.0 (2026-03-30)

There is a controvertial solution I used to support "skill(skill='command-name')" syntax. Apart from that everything is expected to be fully functional.

## Version 1.22.1

I decided to add 'mode: subagent' property to all custom agents. It should not affect any GSD functionality. However, it should remove unnecessary agents out of the list, available by Tab.
Expand Down
170 changes: 168 additions & 2 deletions assets/bin/gsd-translate-in-place.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
* 2 Runtime error (file I/O, permissions)
*/

import { readFile, writeFile, access } from 'node:fs/promises';
import { resolve, dirname } from 'node:path';
import { readFile, writeFile, access, mkdir } from 'node:fs/promises';
import { resolve, dirname, basename } from 'node:path';
import { fileURLToPath } from 'node:url';

// Use dynamic import for tinyglobby
Expand Down Expand Up @@ -269,6 +269,159 @@ async function loadConfig(configPath) {
return loadConfigs([configPath]);
}

async function ensureCommandNames(apply) {
const commandsDir = resolve(__dirname, '../../gsd-opencode/commands/gsd');

let commandFiles;
try {
commandFiles = await glob(['*.md'], { cwd: commandsDir, onlyFiles: true, absolute: true });
} catch {
console.log('No command files found to check for missing name: field.');
return { fixed: 0, missing: 0 };
}

if (!commandFiles || commandFiles.length === 0) {
console.log('No command files found to check for missing name: field.');
return { fixed: 0, missing: 0 };
}

let fixed = 0;
let missing = 0;

for (const filePath of commandFiles) {
const commandName = basename(filePath, '.md');
let content;

try {
content = await readFile(filePath, 'utf-8');
} catch {
continue;
}

const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
if (!frontmatterMatch) continue;

const frontmatter = frontmatterMatch[1];

if (/^name:/m.test(frontmatter)) continue;

missing++;
const newFrontmatter = `name: ${commandName}\n${frontmatter}`;
const newContent = content.replace(
/^---\n([\s\S]*?)\n---/,
`---\n${newFrontmatter}\n---`
);

if (apply) {
await writeFile(filePath, newContent, 'utf-8');
console.log(` Fixed missing name: in ${commandName}.md`);
fixed++;
} else {
console.log(` [dry-run] Would add name: ${commandName} to ${commandName}.md`);
}
}

if (missing > 0) {
console.log(`Command name check: ${missing} file(s) missing name: field${apply ? `, ${fixed} fixed` : ' (dry-run)'}`);
} else {
console.log('All command files have name: in frontmatter.');
}

return { fixed, missing };
}

async function discoverGsdSkillReferences(searchPatterns) {
const files = await glob(searchPatterns, {
ignore: ['node_modules/**', '.git/**'],
onlyFiles: true
});

if (!files || files.length === 0) {
return new Set();
}

const skillRefs = new Set();
const pattern = /skill\(skill="gsd-([^"]+)"/g;

for (const file of files) {
try {
const content = await readFile(file, 'utf-8');
let match;
while ((match = pattern.exec(content)) !== null) {
skillRefs.add(`gsd-${match[1]}`);
}
pattern.lastIndex = 0;
} catch {
// skip unreadable files
}
}

return skillRefs;
}

async function generateSkillWrappers(commandNames) {
const commandsDir = resolve(__dirname, '../../gsd-opencode/commands/gsd');
const skillsBaseDir = resolve(__dirname, '../../gsd-opencode/skills');

const commandSet = new Set(commandNames);
let created = 0;
let skipped = 0;
let notFound = 0;

for (const commandName of commandSet) {
const commandFile = resolve(commandsDir, `${commandName}.md`);
const skillDir = resolve(skillsBaseDir, commandName);
const skillFile = resolve(skillDir, 'SKILL.md');

try {
await access(commandFile);
} catch {
console.warn(` Command file not found: ${commandName}.md`);
notFound++;
continue;
}

try {
await access(skillFile);
skipped++;
continue;
} catch {
// file doesn't exist yet, proceed
}

const content = await readFile(commandFile, 'utf-8');

const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
let skillContent;

if (frontmatterMatch) {
const originalFm = frontmatterMatch[1].trim();
const body = frontmatterMatch[2];

const nameMatch = originalFm.match(/^name:\s*(.+)$/m);
const commandDisplayName = nameMatch ? nameMatch[1].trim() : commandName;

const newFrontmatter = [
`---`,
`name: ${commandName}`,
`description: Implementation of ${commandDisplayName} command`,
`---`
].join('\n');

skillContent = newFrontmatter + '\n\n' + body;
} else {
skillContent = `---\nname: ${commandName}\ndescription: Implementation of ${commandName} command\n---\n\n` + content;
}

await mkdir(skillDir, { recursive: true });
await writeFile(skillFile, skillContent, 'utf-8');
created++;
}

console.log(`Skill wrappers: created ${created}, skipped ${skipped} (already exist), not found ${notFound}`);
return { created, skipped, notFound };
}

/**
* Main execution
*/
Expand Down Expand Up @@ -483,6 +636,19 @@ async function main() {
}

console.log('');

console.log('Checking command files for missing name: in frontmatter...');
await ensureCommandNames(args.apply);
console.log('');

const skillRefs = await discoverGsdSkillReferences(config.patterns);
if (skillRefs.size > 0) {
console.log(`Discovered ${skillRefs.size} gsd skill reference(s): ${[...skillRefs].join(', ')}`);
await generateSkillWrappers([...skillRefs]);
} else {
console.log('No gsd skill references found in processed files.');
}

console.log(formatter.formatSuccess('Done!'));
process.exit(EXIT_SUCCESS);
}
Expand Down
68 changes: 64 additions & 4 deletions assets/configs/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -264,13 +264,21 @@
"description": "Generic regex to convert any remaining tools list to YAML map"
},
{
"_comment": "Generic regex fallback for any remaining tools: lines",
"_comment": "allowed-tools with inline tool list (e.g. 'allowed-tools: Read, Write, Edit')",
"pattern": "^allowed-tools: ([A-Za-z, ]+)$",
"replacement": "permissions",
"caseSensitive": true,
"isRegex": true,
"transform": "allowed_tools_inline_to_yaml",
"description": "Convert inline allowed-tools list to YAML permissions map"
},
{
"_comment": "allowed-tools without inline list (multiline, already handled by - Read rules)",
"pattern": "allowed-tools:",
"replacement": "permissions:",
"caseSensitive": true,
"isRegex": false,
"transform": "allowed-tools to permissions",
"description": ""
"description": "Rename allowed-tools key to permissions for multiline format"
},
{
"pattern": "<sub>",
Expand Down Expand Up @@ -320,6 +328,12 @@
"caseSensitive": true,
"description": "Transform named color purple to hex"
},
{
"pattern": "color: magenta",
"replacement": "color: \"#FF00FF\"",
"caseSensitive": true,
"description": "Transform named color purple to hex"
},
{
"pattern": "All arguments become",
"replacement": "$ARGUMENTS become",
Expand All @@ -332,6 +346,16 @@
"caseSensitive": true,
"description": "Transform general-purpose subagent type to general"
},
{
"pattern": "'general-purpose'",
"replacement": "'general'",
"description": "Fix: quoted general-purpose subagent type name to general"
},
{
"pattern": "general-purpose research agent",
"replacement": "general research agent",
"description": "Fix: general-purpose research agent description in discuss-phase-assumptions"
},
{
"pattern": "subagent_type=\"Explore\"",
"replacement": "subagent_type=\"explore\"",
Expand All @@ -344,6 +368,16 @@
"caseSensitive": true,
"description": "Transform task subagent type to general"
},
{
"pattern": "skill(skill=\"gsd:",
"replacement": "skill(skill=\"gsd-",
"description": "Fix: v1.30.0 introduced skill() calls with gsd: prefix instead of gsd- prefix"
},
{
"pattern": "`gsd:discuss-phase`",
"replacement": "`gsd-discuss-phase`",
"description": "Fix: standalone gsd:discuss-phase reference in autonomous.md note"
},
{
"pattern": "CLAUDE.md",
"replacement": "AGENTS.md",
Expand Down Expand Up @@ -399,6 +433,31 @@
"replacement": "get-shit-done/workflows/oc-set-profile.md",
"description": "Use OpenCode related process instead of Claude Code's one"
},
{
"pattern": "!`node \"$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs\" config-set-model-profile $ARGUMENTS --raw`",
"replacement": "<objective>\n Switch the model profile used by GSD agents. Controls which OpenCode model each agent uses, balancing quality vs token spend.\n\n Routes to the set-profile workflow which handles:\n - Argument validation (simple/smart/genius)\n - Config file creation if missing\n - Profile update in config.json\n - Confirmation with model table display\n </objective>\n\n <execution_context>\n @$HOME/.config/opencode/get-shit-done/workflows/oc-set-profile.md\n </execution_context>\n\n <process>\n **Follow the set-profile workflow** from `@$HOME/.config/opencode/get-shit-done/workflows/oc-set-profile.md`.\n\n The workflow handles all logic including:\n 1. Profile argument validation\n 2. Config file ensuring\n 3. Config reading and updating\n 4. Model table generation from MODEL_PROFILES\n 5. Confirmation display\n </process> ",
"description": "Use OpenCode related process instead of Claude Code's one"
},
{
"pattern": "<purpose>",
"replacement": "<objective>",
"description": "gsd-reapply-patches.md"
},
{
"pattern": "</purpose>",
"replacement": "</objective>",
"description": "gsd-reapply-patches.md"
},
{
"pattern": "Manage parallel workstreams for concurrent milestone work.",
"replacement": "<objective>\nManage parallel workstreams for concurrent milestone work.\n</objective>",
"description": "gsd-reapply-patches.md"
},
{
"pattern": "Show the following output to the user verbatim, with no extra commentary:",
"replacement": "",
"description": "gsd-set-profile"
},
{
"pattern": "default: `balanced`",
"replacement": "default: `simple`",
Expand Down Expand Up @@ -495,6 +554,7 @@
"name: set-profile",
"subagent_type=\"general-purpose\"",
"subagent_type=\"Explore\"",
"CLAUDE.md"
"CLAUDE.md",
"config-set-model-profile"
]
}
Loading
Loading