chore: initial project setup with agent guide

This commit is contained in:
Variet-Worker
2026-04-05 00:43:39 +09:00
commit 7890ff6644
1368 changed files with 213076 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
const fs = require('fs');
const path = require('path');
const vendorDir = path.join(__dirname, '../vendor');
const activeSkillsDir = path.join(__dirname, '../skills');
const targets = [
{ src: path.join(vendorDir, 'superpowers/skills'), type: 'directory_of_skills' },
{ src: path.join(vendorDir, 'obsidian-skills/skills'), type: 'directory_of_skills' }
];
let copiedCount = 0;
if (!fs.existsSync(activeSkillsDir)) {
fs.mkdirSync(activeSkillsDir, { recursive: true });
}
targets.forEach(target => {
if (fs.existsSync(target.src)) {
const items = fs.readdirSync(target.src);
items.forEach(item => {
const srcPath = path.join(target.src, item);
const destPath = path.join(activeSkillsDir, item);
if (fs.statSync(srcPath).isDirectory()) {
// Ensure SKILL.md exists before copying
if (fs.existsSync(path.join(srcPath, 'SKILL.md'))) {
// Node 16.7+ standard copy
fs.cpSync(srcPath, destPath, { recursive: true, force: true });
copiedCount++;
}
}
});
}
});
// Create .gitignore to avoid committing flattened skills to the root repo
// This keeps the Zero-Pollution architecture intact!
const gitignorePath = path.join(activeSkillsDir, '.gitignore');
const gitignoreContent = [
'# Auto-generated by extract_skills.js',
'*', // Ignore everything by default
'!.gitignore', // Track this file
'!ui-ux-pro-max/', // Keep manually copied ones
'!browser_use/', // Keep if explicitly placed
'!mini-swe/',
'!gsd-*/' // Essential for tracking auto-generated GSD commands
].join('\n');
fs.writeFileSync(gitignorePath, gitignoreContent, 'utf8');
console.log(`Successfully extracted and flattened ${copiedCount} internal skills to .agent/skills/`);

View File

@@ -0,0 +1,49 @@
@echo off
chcp 65001 >nul
:: ==============================================================================
:: [NEW_GENE MASTER SYNC TOOL]
:: 이 스크립트는 중앙 관리자만이 오직 이 메인 저장소(Master)에서 작동시키는
:: 외부 오픈소스 서브모듈 동기화 및 스킬 평탄화 파이프라인입니다.
:: 하위 파생 프로젝트들은 이 스크립트를 구동할 필요 없이 'git pull' 단 한방으로 결과를 상속받습니다.
:: ==============================================================================
echo 🔄 [1/5] 업스트림 오픈소스 서브모듈 메인 브랜치 추적 동기화 중...
git submodule update --remote --merge
if %errorlevel% neq 0 (
echo ❌ 서브모듈 동기화 실패!
exit /b %errorlevel%
)
echo 📦 [2/5] 로컬 Node 패키지 업데이트 및 GSD, UI-UX-PRO-MAX 동기화...
cd .agent\env
call npm install
call npm update get-shit-done-cc uipro-cli
cd ..\..
call cmd.exe /c ".agent\env\node_modules\.bin\uipro update"
call cmd.exe /c ".agent\env\node_modules\.bin\get-shit-done-cc --antigravity --local"
if %errorlevel% neq 0 (
echo ❌ 로컬 에이전트 패키지 동기화 실패!
exit /b %errorlevel%
)
echo ⛏️ [3/5] 업데이트된 서브모듈에서 최상위 스킬 추출 및 평탄화 중...
node .agent\scripts\extract_skills.js
if %errorlevel% neq 0 (
echo ❌ 평탄화 스크립트 실행 실패!
exit /b %errorlevel%
)
echo 🌐 [4/5] 신규 유입된 영문 스킬 설명을 한글 UI 친화적 언어로 번역 중...
node .agent\scripts\translate_skills.js
if %errorlevel% neq 0 (
echo ❌ 번역 스크립트 실행 실패!
exit /b %errorlevel%
)
echo 📦 [5/5] 변동 사항을 Git 트래킹 리스트에 올려 위성 배포(Push) 준비 완료...
git add .agent\vendor\ .agent\skills\ .agent\get-shit-done\ .gitmodules
git commit -m "chore(agent): 마스터 허브 오픈소스 서브모듈 최신화 및 평탄화 동기화 완료" || echo ⚠️ 변동 사항이 없습니다.
echo.
echo ✅ 모든 서브모듈 추출 작업이 마스터 레포지토리에 귀속되었습니다.
echo ✅ 이제 'git push' 를 통해 다른 파생 프로젝트들에게 이 최신 스킬셋을 무혈 배포하십시오!

View File

@@ -0,0 +1,47 @@
#!/bin/bash
# ==============================================================================
# [NEW_GENE MASTER SYNC TOOL]
# 이 스크립트는 중앙 관리자(신규 유전자 배포자)만이 오직 이 메인 저장소(Master)에서 작동시키는
# 외부 오픈소스 서브모듈 동기화 및 스킬 평탄화 파이프라인입니다.
# 하위 위성 프로젝트 개발자들은 이 스크립트를 누를 필요 없이 오직 git pull만으로 결과를 상속받습니다.
# ==============================================================================
echo "🔄 [1/5] 업스트림 오픈소스 서브모듈 메인 브랜치 추적 동기화 중..."
git submodule update --remote --merge
if [ $? -ne 0 ]; then
echo "❌ 서브모듈 동기화 실패!"
exit 1
fi
echo "📦 [2/5] 로컬 Node 패키지 업데이트 및 GSD, UI-UX-PRO-MAX 동기화..."
cd .agent/env || exit
npm install
npm update get-shit-done-cc uipro-cli
cd ../..
.agent/env/node_modules/.bin/uipro update
.agent/env/node_modules/.bin/get-shit-done-cc --antigravity --local
if [ $? -ne 0 ]; then
echo "❌ 로컬 에이전트 패키지 동기화 실패!"
exit 1
fi
echo "⛏️ [3/5] 업데이트된 서브모듈에서 19개 이상 최상위 스킬 추출 및 평탄화 중..."
node .agent/scripts/extract_skills.js
if [ $? -ne 0 ]; then
echo "❌ 평탄화 스크립트 실행 실패!"
exit 1
fi
echo "🌐 [4/5] 신규 유입된 영문 스킬 설명을 한글 UI 친화적 언어로 심층 번역 중..."
node .agent/scripts/translate_skills.js
if [ $? -ne 0 ]; then
echo "❌ 번역 스크립트 실행 실패!"
exit 1
fi
echo "📦 [5/5] 변동 사항을 Git 트래킹 리스트에 커밋하고 위성 배포(Push) 준비 완료..."
git add .agent/vendor/ .agent/skills/ .agent/get-shit-done/ .gitmodules
git commit -m "chore(agent): 마스터 허브 오픈소스 서브모듈 최신화 및 평탄화 동기화 완료" || echo "⚠️ 변동 사항이 없습니다."
echo "✅ 모든 서브모듈 추출 작업이 이 마스터 레포지토리에 귀속되었습니다."
echo "✅ 이제 'git push' 를 입력하여 다른 파생 프로젝트들에게 이 성과를 무혈 배포하십시오!"

View File

@@ -0,0 +1,91 @@
const fs = require('fs');
const path = require('path');
// 1. Get arguments
const args = process.argv.slice(2);
if (args.length < 2) {
console.error("Usage: node sync_vikunja.js <task_id> <message_or_commit>");
process.exit(1);
}
const taskId = args[0];
const message = args[1];
// 2. Load configuration from .env.agent
const envPath = path.join(__dirname, '../config/.env.agent');
if (!fs.existsSync(envPath)) {
console.error("Error: .agent/config/.env.agent file not found. Please create it from the template.");
process.exit(1);
}
const envContent = fs.readFileSync(envPath, 'utf8');
const env = {};
envContent.split('\n').forEach(line => {
const match = line.match(/^([^#=]+)="?(.*?)"?$/);
if (match) {
env[match[1].trim()] = match[2].trim();
}
});
const apiUrl = env.VIKUNJA_API_URL;
const apiToken = env.VIKUNJA_API_TOKEN;
if (!apiUrl || !apiToken || apiUrl.includes('[YOUR_')) {
console.error("Error: VIKUNJA_API_URL or VIKUNJA_API_TOKEN is not configured correctly in .env.agent.");
process.exit(1);
}
if (env.AGENT_OPERATING_MODE === "TEST") {
console.log("⚠️ TEST Mode Active: Skipping Vikunja Webhook connection.");
process.exit(0);
}
// 3. Helper to make API calls using native fetch (Node 18+)
async function markTaskDoneAndComment(taskId, message) {
try {
console.log(`Connecting to Vikunja API for Task ${taskId}...`);
// Update task status to done
const patchRes = await fetch(`${apiUrl}/tasks/${taskId}`, {
method: 'POST', // Vikunja uses POST to task endpoint for updates
headers: {
'Authorization': `Bearer ${apiToken}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ done: true })
});
if (!patchRes.ok) {
throw new Error(`Failed to mark task as done: ${patchRes.statusText}`);
}
console.log(`✅ Task ${taskId} successfully marked as Done.`);
// Add comment
const commentRes = await fetch(`${apiUrl}/tasks/${taskId}/comments`, {
method: 'PUT',
headers: {
'Authorization': `Bearer ${apiToken}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: `[Agent Automator] Phase completed.\nReason/Hash: ${message}`
})
});
if (!commentRes.ok) {
console.error(`Warning: Task marked as done, but failed to attach comment: ${commentRes.statusText}`);
} else {
console.log("✅ Comment attached successfully.");
}
} catch (error) {
console.error("❌ Failed to sync with Vikunja:");
// Mask the token if it somehow leaks via error message
const secureErr = error.message.replace(new RegExp(apiToken, 'g'), "********");
console.error(secureErr);
process.exit(1);
}
}
markTaskDoneAndComment(taskId, message);

View File

@@ -0,0 +1,77 @@
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
// 1. Load configuration from .env.agent
const envPath = path.join(__dirname, '../config/.env.agent');
if (!fs.existsSync(envPath)) {
console.error("Error: .agent/config/.env.agent file not found. Please create it from the template.");
process.exit(1);
}
const envContent = fs.readFileSync(envPath, 'utf8');
const env = {};
envContent.split('\n').forEach(line => {
// Basic dotenv parser supporting basic key="value" formats
const match = line.match(/^([^#=]+)="?(.*?)"?$/);
if (match) {
env[match[1].trim()] = match[2].trim();
}
});
// 2. Resolve Wiki URL (handle simple interpolations)
let wikiUrl = env.WIKI_REPO_URL;
if (!wikiUrl) {
console.error("Error: WIKI_REPO_URL is not defined in .env.agent.");
process.exit(1);
}
if (wikiUrl.includes('${GITEA_USERNAME}')) {
wikiUrl = wikiUrl.replace('${GITEA_USERNAME}', env.GITEA_USERNAME || '');
}
if (wikiUrl.includes('${GITEA_API_TOKEN}')) {
wikiUrl = wikiUrl.replace('${GITEA_API_TOKEN}', env.GITEA_API_TOKEN || '');
}
if (wikiUrl.includes('[YOUR_')) {
console.error("Warning: WIKI_REPO_URL looks like it contains placeholder tags ([YOUR_...]). Ensure the config is set up correctly.");
// We let it proceed in case it's a test environment with dummy tags
}
// 3. Execute Git commands in the Wiki directory
const wikiDir = path.join(__dirname, '../../.knowledge/project_wiki');
if (!fs.existsSync(path.join(wikiDir, '.git'))) {
console.error(`Error: .git repository not found inside ${wikiDir}. Wiki must be initialized via git first.`);
process.exit(1);
}
try {
console.log("Adding Wiki changes...");
execSync('git add .', { cwd: wikiDir, stdio: 'inherit' });
// Check if there are changes to commit
const status = execSync('git status --porcelain', { cwd: wikiDir }).toString();
if (status.trim().length > 0) {
console.log("Committing changes...");
execSync('git commit -m "docs(agent): Auto-sync Wiki from Antigravity Agent"', { cwd: wikiDir, stdio: 'inherit' });
} else {
console.log("No changes to commit in Wiki.");
}
console.log("Pushing to Gitea Wiki repository...");
// WARNING: Output masking is not actively done here; this relies on the underlying tool to obscure tokens if echoed,
// but execSync with 'inherit' might leak the URL if git fails. We mask it manually for display, but git handles the URL internally.
execSync(`git push "${wikiUrl}" main`, { cwd: wikiDir, stdio: 'pipe' });
console.log("✅ Wiki synchronization completed successfully.");
} catch (e) {
console.error("❌ Failed to sync wiki.");
// Mask API tokens in error messages
const errorMessage = e.message.replace(new RegExp(env.GITEA_API_TOKEN || 'dummy', 'g'), '********');
console.error(errorMessage);
if (e.stderr) {
const stderrStr = e.stderr.toString().replace(new RegExp(env.GITEA_API_TOKEN || 'dummy', 'g'), '********');
console.error(stderrStr);
}
process.exit(1);
}

View File

@@ -0,0 +1,93 @@
const fs = require('fs');
const path = require('path');
const skillDir = 'C:\\Users\\Certes\\.gemini\\antigravity\\skills';
const translations = {
"Manage parallel workstreams — list, create, switch, status, progress, complete, and resume": "병렬 작업 스트림 관리 — 목록, 생성, 전환, 상태, 진행률, 완료 및 재개",
"Validate built features through conversational UAT": "대화형 UAT를 통해 구현된 기능 검증",
"Retroactively audit and fill Nyquist validation gaps for a completed phase": "완료된 단계에 대한 검증 누락 사후 감사 및 보완",
"Update GSD to latest version with changelog display": "GSD를 최신 버전으로 업데이트하고 변경 사항 표시",
"Retroactive 6-pillar visual audit of implemented frontend code": "구현된 프론트엔드 코드에 대한 6개 요소 시각적 사후 감사",
"Generate UI design contract (UI-SPEC.md) for frontend phases": "프론트엔드 단계를 위한 UI 디자인 명세서(UI-SPEC.md) 생성",
"Manage persistent context threads for cross-session work": "교차 세션 작업을 위한 영구 컨텍스트 스레드 관리",
"Display project statistics — phases, plans, requirements, git metrics, and timeline": "프로젝트 통계 표시 — 단계, 계획, 요구사항, Git 지표 및 타임라인",
"Create PR, run review, and prepare for merge after verification passes": "검증 통과 후 PR 생성, 리뷰 실행 및 병합 준비",
"Configure GSD workflow toggles and model profile": "GSD 워크플로우 옵션 및 모델 프로필 구성",
"Switch model profile for GSD agents (quality/balanced/budget/inherit)": "GSD 요원의 모델 프로필 전환 (고품질/균형/예산/상속)",
"Generate a session report with token usage estimates, work summary, and outcomes": "토큰 사용량, 작업 요약 및 결과를 포함한 세션 보고서 생성",
"Review and promote backlog items to active milestone": "백로그 항목을 검토하고 활성 마일스톤으로 승격",
"Request cross-AI peer review of phase plans from external AI CLIs": "외부 AI CLI에 단계 계획에 대한 교차 AI 동료 리뷰 요청",
"Resume work from previous session with full context restoration": "전체 컨텍스트 복원과 함께 이전 세션에서 작업 재개",
"Research how to implement a phase (standalone - usually use /gsd-plan-phase instead)": "단계를 구현하는 방법 리서치 (단독 실행 - 보통 /gsd-plan-phase 사용)",
"Remove a GSD workspace and clean up worktrees": "GSD 워크스페이스 제거 및 워크트리 정리",
"Remove a future phase from roadmap and renumber subsequent phases": "로드맵에서 향후 단계를 제거하고 이후 단계 번호 재지정",
"Reapply local modifications after a GSD update": "GSD 업데이트 후 로컬 수정 사항 재적용",
"Execute a quick task with GSD guarantees (atomic commits, state tracking) but skip optional agents": "GSD 보장(원자적 커밋, 상태 추적)을 사용하여 빠른 작업을 실행하되 선택적 요원 생략",
"Check project progress, show context, and route to next action (execute or plan)": "프로젝트 진행 상황 확인, 컨텍스트 표시 및 다음 작업(실행 또는 계획)으로 라우팅",
"Generate developer behavioral profile and create Claude-discoverable artifacts": "개발자 행동 프로필을 생성하고 AI가 인지할 수 있는 문서 작성",
"Create a clean PR branch by filtering out .planning/ commits — ready for code review": ".planning/ 커밋을 필터링하여 깔끔한 PR 브랜치 생성 — 코드 리뷰 준비",
"Capture a forward-looking idea with trigger conditions — surfaces automatically at the right milestone": "향후 아이디어를 트리거 조건과 함께 캡처 — 적절한 마일스톤에서 자동 표시",
"Create detailed phase plan (PLAN.md) with verification loop": "검증 루프를 포함한 상세 단계 계획(PLAN.md) 생성",
"Create phases to close all gaps identified by milestone audit": "마일스톤 감사에서 식별된 모든 격차를 해소하기 위한 단계 생성",
"Create context handoff when pausing work mid-phase": "작업 중단 시 컨텍스트 인수인계 파일 생성",
"Zero-friction idea capture. Append, list, or promote notes to todos.": "방해 없는 아이디어 캡처. 메모 추가, 나열 또는 할 일로 승격.",
"Automatically advance to the next logical step in the GSD workflow": "GSD 워크플로우의 다음 논리적 단계로 자동 진행",
"Create an isolated workspace with repo copies and independent .planning/": "외부 레포 사본 및 독립적인 .planning/을 갖춘 격리된 워크스페이스 생성",
"Initialize a new project with deep context gathering and PROJECT.md": "심층 컨텍스트 수집 및 PROJECT.md와 함께 새 프로젝트 초기화",
"Start a new milestone cycle — update PROJECT.md and route to requirements": "새로운 마일스톤 주기 시작 — PROJECT.md 업데이트 및 요구사항 재정의",
"Generate a comprehensive project summary from milestone artifacts for team onboarding and review": "팀 온보딩 및 리뷰를 위해 마일스톤 산출물에서 종합적인 프로젝트 요약 생성",
"Analyze codebase with parallel mapper agents to produce .planning/codebase/ documents": "병렬 매퍼 요원으로 코드베이스를 분석하여 .planning/codebase/ 문서 생성",
"Interactive command center for managing multiple phases from one terminal": "하나의 터미널에서 여러 단계를 관리하는 대화형 명령 센터",
"List active GSD workspaces and their status": "활성 GSD 워크스페이스 및 상태 나열",
"Surface the agent's assumptions about a phase approach before planning": "계획 전 단계적 접근 방식에 대한 요원의 가정을 미리 표시",
"Join the GSD Discord community": "GSD 디스코드 커뮤니티 참가",
"Insert urgent work as decimal phase (e.g., 72.1) between existing phases": "기존 단계 사이에 소수점 단계(예: 72.1)로 긴급 작업 삽입",
"Show available GSD commands and usage guide": "사용 가능한 GSD 명령어 및 사용 가이드 표시",
"Diagnose planning directory health and optionally repair issues": "계획 디렉토리 상태 진단 및 선택적으로 문제 복구",
"Post-mortem investigation for failed GSD workflows — analyzes git history, artifacts, and state to diagnose what went wrong": "실패한 GSD 워크플로우에 대한 사후 조사 — git 기록, 문서 및 상태 분석",
"Execute a trivial task inline — no subagents, no planning overhead": "인라인으로 사소한 작업 실행 — 서브 에이전트 및 계획 오버헤드 없음",
"Execute all plans in a phase with wave-based parallelization": "웨이브(Wave) 기반 병렬 처리를 사용하여 단계의 모든 계획 실행",
"Route freeform text to the right GSD command automatically": "자유 형식 텍스트를 적절한 GSD 명령으로 자동 라우팅",
"Systematic debugging with persistent state across context resets": "컨텍스트가 리셋되어도 상태를 유지하는 체계적인 디버깅",
"Gather phase context through adaptive questioning before planning. Use --auto to skip interactive questions (the agent picks recommended defaults).": "계획 전 심층 질문을 통해 단계 컨텍스트 수집. 대화형 건너뛰기(--auto) 가능.",
"Archive completed milestone and prepare for next version": "완료된 마일스톤 보관 및 다음 버전 준비",
"List pending todos and select one to work on": "보류 중인 할 일 목록 표시 및 작업할 항목 선택",
"Cross-phase audit of all outstanding UAT and verification items": "모든 미결 UAT 및 검증 항목에 대한 전체 단계 교차 감사",
"Audit milestone completion against original intent before archiving": "보관 전 원래 의도와 비교하여 마일스톤 달성 여부 감사",
"Capture idea or task as todo from current conversation context": "현재 대화 컨텍스트에서 아이디어 또는 작업을 할 일로 캡처",
"Generate tests for a completed phase based on UAT criteria and implementation": "UAT 기준 및 구현을 기반으로 완료된 단계에 대한 테스트 생성",
"Add phase to end of current milestone in roadmap": "로드맵의 현재 마일스톤 끝에 새 단계 추가",
"Add an idea to the backlog parking lot (999.x numbering)": "백로그 주차장(999.x 넘버링)에 아이디어 추가",
"Run all remaining phases autonomously — discuss→plan→execute per phase": "모든 남은 단계를 완전히 자율적으로 실행 (논의→계획→실행 루프)",
"Archive accumulated phase directories from completed milestones": "완료된 마일스톤에서 쌓인 단계 디렉토리 보관 및 정리"
};
let modifiedCount = 0;
try {
const dirs = fs.readdirSync(skillDir);
for (const d of dirs) {
if (d.startsWith('gsd-')) {
const skillPath = path.join(skillDir, d, 'SKILL.md');
if (fs.existsSync(skillPath)) {
const content = fs.readFileSync(skillPath, 'utf8');
let newContent = content;
for (const [eng, kor] of Object.entries(translations)) {
// Escape regex special chars in english text
const escapedEng = eng.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const regex = new RegExp(`^description:\\s*${escapedEng}\\s*$`, 'm');
newContent = newContent.replace(regex, `description: ${kor}`);
}
if (newContent !== content) {
fs.writeFileSync(skillPath, newContent, 'utf8');
modifiedCount++;
}
}
}
}
console.log(`Successfully translated ${modifiedCount} SKILL.md files.`);
} catch (e) {
console.error(e);
process.exit(1);
}

View File

@@ -0,0 +1,86 @@
import os
import glob
import re
skill_dir = r"C:\Users\Certes\.gemini\antigravity\skills"
translations = {
"Manage parallel workstreams — list, create, switch, status, progress, complete, and resume": "병렬 작업 스트림 관리 — 목록, 생성, 전환, 상태, 진행률, 완료 및 재개",
"Validate built features through conversational UAT": "대화형 UAT를 통해 구현된 기능 검증",
"Retroactively audit and fill Nyquist validation gaps for a completed phase": "완료된 단계에 대한 검증 누락 사후 감사 및 보완",
"Update GSD to latest version with changelog display": "GSD를 최신 버전으로 업데이트하고 변경 사항 표시",
"Retroactive 6-pillar visual audit of implemented frontend code": "구현된 프론트엔드 코드에 대한 6개 요소 시각적 사후 감사",
"Generate UI design contract (UI-SPEC.md) for frontend phases": "프론트엔드 단계를 위한 UI 디자인 명세서(UI-SPEC.md) 생성",
"Manage persistent context threads for cross-session work": "교차 세션 작업을 위한 영구 컨텍스트 스레드 관리",
"Display project statistics — phases, plans, requirements, git metrics, and timeline": "프로젝트 통계 표시 — 단계, 계획, 요구사항, Git 지표 및 타임라인",
"Create PR, run review, and prepare for merge after verification passes": "검증 통과 후 PR 생성, 리뷰 실행 및 병합 준비",
"Configure GSD workflow toggles and model profile": "GSD 워크플로우 옵션 및 모델 프로필 구성",
"Switch model profile for GSD agents (quality/balanced/budget/inherit)": "GSD 요원의 모델 프로필 전환 (고품질/균형/예산/상속)",
"Generate a session report with token usage estimates, work summary, and outcomes": "토큰 사용량, 작업 요약 및 결과를 포함한 세션 보고서 생성",
"Review and promote backlog items to active milestone": "백로그 항목을 검토하고 활성 마일스톤으로 승격",
"Request cross-AI peer review of phase plans from external AI CLIs": "외부 AI CLI에 단계 계획에 대한 교차 AI 동료 리뷰 요청",
"Resume work from previous session with full context restoration": "전체 컨텍스트 복원과 함께 이전 세션에서 작업 재개",
"Research how to implement a phase (standalone - usually use /gsd-plan-phase instead)": "단계를 구현하는 방법 리서치 (단독 실행 - 보통 /gsd-plan-phase 사용)",
"Remove a GSD workspace and clean up worktrees": "GSD 워크스페이스 제거 및 워크트리 정리",
"Remove a future phase from roadmap and renumber subsequent phases": "로드맵에서 향후 단계를 제거하고 이후 단계 번호 재지정",
"Reapply local modifications after a GSD update": "GSD 업데이트 후 로컬 수정 사항 재적용",
"Execute a quick task with GSD guarantees (atomic commits, state tracking) but skip optional agents": "GSD 보장(원자적 커밋, 상태 추적)을 사용하여 빠른 작업을 실행하되 선택적 요원 생략",
"Check project progress, show context, and route to next action (execute or plan)": "프로젝트 진행 상황 확인, 컨텍스트 표시 및 다음 작업(실행 또는 계획)으로 라우팅",
"Generate developer behavioral profile and create Claude-discoverable artifacts": "개발자 행동 프로필을 생성하고 AI가 인지할 수 있는 문서 작성",
"Create a clean PR branch by filtering out .planning/ commits — ready for code review": ".planning/ 커밋을 필터링하여 깔끔한 PR 브랜치 생성 — 코드 리뷰 준비",
"Capture a forward-looking idea with trigger conditions — surfaces automatically at the right milestone": "향후 아이디어를 트리거 조건과 함께 캡처 — 적절한 마일스톤에서 자동 표시",
"Create detailed phase plan (PLAN.md) with verification loop": "검증 루프를 포함한 상세 단계 계획(PLAN.md) 생성",
"Create phases to close all gaps identified by milestone audit": "마일스톤 감사에서 식별된 모든 격차를 해소하기 위한 단계 생성",
"Create context handoff when pausing work mid-phase": "작업 중단 시 컨텍스트 인수인계 파일 생성",
"Zero-friction idea capture. Append, list, or promote notes to todos.": "방해 없는 아이디어 캡처. 메모 추가, 나열 또는 할 일로 승격.",
"Automatically advance to the next logical step in the GSD workflow": "GSD 워크플로우의 다음 논리적 단계로 자동 진행",
"Create an isolated workspace with repo copies and independent .planning/": "외부 레포 사본 및 독립적인 .planning/을 갖춘 격리된 워크스페이스 생성",
"Initialize a new project with deep context gathering and PROJECT.md": "심층 컨텍스트 수집 및 PROJECT.md와 함께 새 프로젝트 초기화",
"Start a new milestone cycle — update PROJECT.md and route to requirements": "새로운 마일스톤 주기 시작 — PROJECT.md 업데이트 및 요구사항 재정의",
"Generate a comprehensive project summary from milestone artifacts for team onboarding and review": "팀 온보딩 및 리뷰를 위해 마일스톤 산출물에서 종합적인 프로젝트 요약 생성",
"Analyze codebase with parallel mapper agents to produce .planning/codebase/ documents": "병렬 매퍼 요원으로 코드베이스를 분석하여 .planning/codebase/ 문서 생성",
"Interactive command center for managing multiple phases from one terminal": "하나의 터미널에서 여러 단계를 관리하는 대화형 명령 센터",
"List active GSD workspaces and their status": "활성 GSD 워크스페이스 및 상태 나열",
"Surface the agent's assumptions about a phase approach before planning": "계획 전 단계적 접근 방식에 대한 요원의 가정을 미리 표시",
"Join the GSD Discord community": "GSD 디스코드 커뮤니티 참가",
"Insert urgent work as decimal phase (e.g., 72.1) between existing phases": "기존 단계 사이에 소수점 단계(예: 72.1)로 긴급 작업 삽입",
"Show available GSD commands and usage guide": "사용 가능한 GSD 명령어 및 사용 가이드 표시",
"Diagnose planning directory health and optionally repair issues": "계획 디렉토리 상태 진단 및 선택적으로 문제 복구",
"Post-mortem investigation for failed GSD workflows — analyzes git history, artifacts, and state to diagnose what went wrong": "실패한 GSD 워크플로우에 대한 사후 조사 — git 기록, 문서 및 상태 분석",
"Execute a trivial task inline — no subagents, no planning overhead": "인라인으로 사소한 작업 실행 — 서브 에이전트 및 계획 오버헤드 없음",
"Execute all plans in a phase with wave-based parallelization": "웨이브(Wave) 기반 병렬 처리를 사용하여 단계의 모든 계획 실행",
"Route freeform text to the right GSD command automatically": "자유 형식 텍스트를 적절한 GSD 명령으로 자동 라우팅",
"Systematic debugging with persistent state across context resets": "컨텍스트가 리셋되어도 상태를 유지하는 체계적인 디버깅",
"Gather phase context through adaptive questioning before planning. Use --auto to skip interactive questions (the agent picks recommended defaults).": "계획 전 심층 질문을 통해 단계 컨텍스트 수집. 대화형 건너뛰기(--auto) 가능.",
"Archive completed milestone and prepare for next version": "완료된 마일스톤 보관 및 다음 버전 준비",
"List pending todos and select one to work on": "보류 중인 할 일 목록 표시 및 작업할 항목 선택",
"Cross-phase audit of all outstanding UAT and verification items": "모든 미결 UAT 및 검증 항목에 대한 전체 단계 교차 감사",
"Audit milestone completion against original intent before archiving": "보관 전 원래 의도와 비교하여 마일스톤 달성 여부 감사",
"Capture idea or task as todo from current conversation context": "현재 대화 컨텍스트에서 아이디어 또는 작업을 할 일로 캡처",
"Generate tests for a completed phase based on UAT criteria and implementation": "UAT 기준 및 구현을 기반으로 완료된 단계에 대한 테스트 생성",
"Add phase to end of current milestone in roadmap": "로드맵의 현재 마일스톤 끝에 새 단계 추가",
"Add an idea to the backlog parking lot (999.x numbering)": "백로그 주차장(999.x 넘버링)에 아이디어 추가",
"Run all remaining phases autonomously — discuss→plan→execute per phase": "모든 남은 단계를 완전히 자율적으로 실행 (논의→계획→실행 루프)",
"Archive accumulated phase directories from completed milestones": "완료된 마일스톤에서 쌓인 단계 디렉토리 보관 및 정리"
}
modified_count = 0
for filepath in glob.glob(os.path.join(skill_dir, "gsd-*", "SKILL.md")):
try:
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
new_content = content
for eng, kor in translations.items():
pattern = re.compile(r"^description:\s*" + re.escape(eng) + r"\s*$", re.MULTILINE)
new_content = pattern.sub(f"description: {kor}", new_content)
if new_content != content:
with open(filepath, 'w', encoding='utf-8') as f:
f.write(new_content)
modified_count += 1
except Exception as e:
print(f"Error processing {filepath}: {e}")
print(f"Successfully translated {modified_count} SKILL.md files.")

View File

@@ -0,0 +1,53 @@
const fs = require('fs');
const path = require('path');
const skillsDir = path.join(__dirname, '../skills');
// Translation Dictionary (Folder Name -> Korean Description)
const translations = {
'brainstorming': '창의적인 작업(기능 추가, 컴포넌트 설계) 시작 전 필수 사용. 구현 전 의도와 요구사항을 파악하고 기획합니다.',
'defuddle': 'URL 링크를 통해 웹페이지 문서의 군더더기를 제거하고 깔끔한 마크다운 정보만 추출하여 분석합니다.',
'dispatching-parallel-agents': '상태 공유나 순차적 의존성이 없는 2개 이상의 독립적인 작업을 병렬로 처리할 때 사용합니다.',
'executing-plans': '작성된 구현 계획서(PLAN)를 바탕으로 단계별 코드 작성을 실행하고 리뷰 체크포인트를 수행합니다.',
'finishing-a-development-branch': '구현 및 테스트가 100% 완료된 후, 브랜치 병합(Merge/PR)을 결정하거나 정리하는 마무리 스킬입니다.',
'json-canvas': 'JSON Canvas 형식의 시각적 마인드맵, 노드, 다이어그램, 플로우차트 파일(.canvas)을 생성하고 편집합니다.',
'obsidian-bases': '옵시디언의 데이터베이스 뷰, 필터, 수식, 요약 기능 등을 포함하는 Base 파일(.base)을 통제합니다.',
'obsidian-cli': '옵시디언 CLI 환경을 제어해 노트를 검색/생성하고, 플러그인을 디버깅하거나 에러를 캡처합니다.',
'obsidian-markdown': '위키링크([[ ]]), 콜아웃, 프로퍼티(YAML) 등 옵시디언에 특화된 마크다운 문법(.md)을 완벽하게 작성합니다.',
'receiving-code-review': '코드 리뷰 피드백을 수신했을 때, 무지성으로 반영하기 전 기술적인 타당성과 엣지 케이스를 검증합니다.',
'requesting-code-review': '주요 기능 구현이 끝났을 때, 코드를 메인(Main)에 병합하기 전 엄격한 품질 검증(코드 리뷰)을 스스로 요청합니다.',
'subagent-driven-development': '구현 계획서 내의 독립적인 작업(Task)들을 여러 하위 에이전트(Subagent)에게 병렬로 위임하여 개발을 가속합니다.',
'systematic-debugging': '버그, 테스트 실패, 예기치 않은 동작 발생 시, 해결책을 던지기 전 체계적인 디버깅 루프를 가동합니다.',
'test-driven-development': '실제 운영 코드를 작성하기 전, 무조건 먼저 실패하는 테스트 코드(TDD)를 작성하여 기능 명세를 강제합니다.',
'using-git-worktrees': '대규모 리팩토링이나 새로운 기능을 시작할 때 메인 환경을 오염시키지 않도록 격리된 Git Worktree를 생성합니다.',
'using-superpowers': '대화 시작 시 1회 필수 가동 스킬. 에이전트가 어떤 스킬과 자원을 보유하고 있는지 파악하고 환경을 준비합니다.',
'verification-before-completion': '작업을 최종 완료 처리하기 전, 테스트와 검증 명령어 라인을 강제로 실행하여 완벽한 성공 여부를 증명합니다.',
'writing-plans': '본격적인 코드 작성에 돌입하기 전, 복잡한 요구사항에 대한 아키텍처 스펙과 다단계 구현 계획서를 수립합니다.',
'writing-skills': '현재 CLI 시스템에 새로운 스킬 룰을 구축하거나, 기존 스킬 문서를 수정 및 디버깅할 때 사용합니다.'
};
let translatedCount = 0;
if (fs.existsSync(skillsDir)) {
const folders = fs.readdirSync(skillsDir);
folders.forEach(folder => {
const skillPath = path.join(skillsDir, folder, 'SKILL.md');
if (translations[folder] && fs.existsSync(skillPath)) {
let content = fs.readFileSync(skillPath, 'utf8');
// Regex to match existing description in YAML frontmatter (with or without quotes)
// It matches 'description:' followed by anything until the end of the line
const newContent = content.replace(/^description:\s*(?:".*?"|.*)$/m, `description: ${translations[folder]}`);
if (content !== newContent) {
fs.writeFileSync(skillPath, newContent, 'utf8');
console.log(`[Translated] ${folder}`);
translatedCount++;
}
}
});
}
console.log(`\n🎉 번역 완료: 총 ${translatedCount}개의 스킬 설명이 로컬라이징 되었습니다.`);