Repository Analysis

gsd-build/get-shit-done

A light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TÂCHES.

10.8 Low AI signal View on GitHub
10.8
Adjusted Score
10.8
Raw Score
100%
Time Factor
2026-05-27
Last Push
63,774
Stars
JavaScript
Language
214,681
Lines of Code
1130
Files
956
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 2MEDIUM 694LOW 260

Pattern Findings

956 matches across 8 categories. Click a row to expand file-level details.

Decorative Section Separators694 hits · 2086 pts
SeverityFileLineSnippet
MEDIUMbin/install.js2515// ── End Cline converters ─────────────────────────────────────────────────────
MEDIUMbin/install.js9931// ─── Update banner (#2795) ──────────────────────────────────────────────────
MEDIUMbin/install.js9931// ─── Update banner (#2795) ──────────────────────────────────────────────────
MEDIUMbin/install.js2487// ── Cline converters ────────────────────────────────────────────────────────
MEDIUMbin/install.js7378// ──────────────────────────────────────────────────────
MEDIUMbin/install.js7380// ──────────────────────────────────────────────────────
MEDIUM…ers/plans/2026-03-18-materialize-new-project-config.md82// ─── config-new-project ──────────────────────────────────────────────────────
MEDIUM…ers/plans/2026-03-18-materialize-new-project-config.md82// ─── config-new-project ──────────────────────────────────────────────────────
MEDIUMsdk/src/cli-transport.ts11// ─── ANSI escape constants (no dependency per D021) ──────────────────────────
MEDIUMsdk/src/cli-transport.ts21// ─── Helpers ─────────────────────────────────────────────────────────────────
MEDIUMsdk/src/cli-transport.ts45// ─── CLITransport ────────────────────────────────────────────────────────────
MEDIUMsdk/src/cli-transport.ts70 // ─── Private formatting ────────────────────────────────────────────
MEDIUMsdk/src/context-truncation.ts12// ─── Types ──────────────────────────────────────────────────────────────────
MEDIUMsdk/src/context-truncation.ts23// ─── Markdown-aware truncation ──────────────────────────────────────────────
MEDIUMsdk/src/context-truncation.ts119// ─── Milestone extraction ───────────────────────────────────────────────────
MEDIUMsdk/src/phase-prompt.ts20// ─── Workflow file mapping ───────────────────────────────────────────────────
MEDIUMsdk/src/phase-prompt.ts34// ─── XML block extraction ────────────────────────────────────────────────────
MEDIUMsdk/src/phase-prompt.ts65// ─── YAML frontmatter stripping ─────────────────────────────────────────────
MEDIUMsdk/src/phase-prompt.ts76// ─── PromptFactory class ─────────────────────────────────────────────────────
MEDIUMsdk/src/research-gate.ts9// ─── Types ──────────────────────────────────────────────────────────────────
MEDIUMsdk/src/research-gate.ts18// ─── Open questions detection ───────────────────────────────────────────────
MEDIUMsdk/src/context-truncation.test.ts8// ─── truncateMarkdown ───────────────────────────────────────────────────────
MEDIUMsdk/src/context-truncation.test.ts76// ─── extractCurrentMilestone ────────────────────────────────────────────────
MEDIUMsdk/src/gsd-tools.ts27// ─── GSDTools class ──────────────────────────────────────────────────────────
MEDIUMsdk/src/gsd-tools.ts139 // ─── Core exec ───────────────────────────────────────────────────────────
MEDIUMsdk/src/gsd-tools.ts149 // ─── Raw exec (no JSON parsing) ───────────────────────────────────────
MEDIUMsdk/src/gsd-tools.ts163 // ─── Typed convenience methods ─────────────────────────────────────────
MEDIUMsdk/src/plan-parser.ts20// ─── YAML frontmatter extraction ─────────────────────────────────────────────
MEDIUMsdk/src/plan-parser.ts155// ─── must_haves block parsing ────────────────────────────────────────────────
MEDIUMsdk/src/plan-parser.ts214// ─── XML task extraction ─────────────────────────────────────────────────────
MEDIUMsdk/src/plan-parser.ts309// ─── Section extraction ──────────────────────────────────────────────────────
MEDIUMsdk/src/plan-parser.ts350// ─── Public API ──────────────────────────────────────────────────────────────
MEDIUMsdk/src/session-runner.test.ts14// ─── Mock the Agent SDK ───────────────────────────────────────────────────────
MEDIUMsdk/src/session-runner.test.ts46// ─── Import SUT after mock is hoisted ────────────────────────────────────────
MEDIUMsdk/src/session-runner.test.ts50// ─── Helpers ─────────────────────────────────────────────────────────────────
MEDIUMsdk/src/session-runner.test.ts56// ─── Tests ───────────────────────────────────────────────────────────────────
MEDIUMsdk/src/session-runner.test.ts99 // ─── #2832: runtime-aware model resolution ─────────────────────────────────
MEDIUMsdk/src/session-runner.test.ts99 // ─── #2832: runtime-aware model resolution ─────────────────────────────────
MEDIUMsdk/src/research-gate.test.ts5 // ── Pass cases ──────────────────────────────────────────────────────────
MEDIUMsdk/src/research-gate.test.ts65 // ── Fail cases ──────────────────────────────────────────────────────────
MEDIUMsdk/src/research-gate.test.ts148 // ── Edge cases ──────────────────────────────────────────────────────────
MEDIUMsdk/src/errors.ts18// ─── Error Classification ───────────────────────────────────────────────────
MEDIUMsdk/src/errors.ts35// ─── GSDError ───────────────────────────────────────────────────────────────
MEDIUMsdk/src/errors.ts53// ─── Exit code mapping ──────────────────────────────────────────────────────
MEDIUMsdk/src/tool-scoping.ts15// ─── Phase default tool sets ─────────────────────────────────────────────────
MEDIUMsdk/src/tool-scoping.ts26// ─── Phase → agent definition filename ──────────────────────────────────────
MEDIUMsdk/src/tool-scoping.ts41// ─── Public API ──────────────────────────────────────────────────────────────
MEDIUMsdk/src/event-stream.ts53// ─── Mapping context ─────────────────────────────────────────────────────────
MEDIUMsdk/src/event-stream.ts60// ─── GSDEventStream ──────────────────────────────────────────────────────────
MEDIUMsdk/src/event-stream.ts74 // ─── Transport management ────────────────────────────────────────────
MEDIUMsdk/src/event-stream.ts98 // ─── Event emission ──────────────────────────────────────────────────
MEDIUMsdk/src/event-stream.ts117 // ─── SDKMessage mapping ──────────────────────────────────────────────
MEDIUMsdk/src/event-stream.ts176 // ─── Cost tracking ───────────────────────────────────────────────────
MEDIUMsdk/src/event-stream.ts203 // ─── Private mappers ─────────────────────────────────────────────────
MEDIUMsdk/src/cli.ts23// ─── Parsed CLI args ─────────────────────────────────────────────────────────
MEDIUMsdk/src/cli.ts182// ─── Usage ───────────────────────────────────────────────────────────────────
MEDIUMsdk/src/cli.ts224// ─── Init input resolution ───────────────────────────────────────────────────
MEDIUMsdk/src/cli.ts281// ─── Main ────────────────────────────────────────────────────────────────────
MEDIUMsdk/src/cli.ts313 // ─── Query command ──────────────────────────────────────────────────────
MEDIUMsdk/src/cli.ts356 // ─── Init command ─────────────────────────────────────────────────────────
634 more matches not shown…
Hyper-Verbose Identifiers178 hits · 148 pts
SeverityFileLineSnippet
LOWbin/install.js2505function convertClaudeAgentToClineAgent(content) {
LOWbin/install.js2517function convertSlashCommandsToCodexSkillMentions(content) {
LOWbin/install.js9938function buildUpdateBannerPromptText() {
LOWbin/install.js49function shouldNormalizeHyphenNamespaceInAgentBody(runtime) {
LOWbin/install.js60function normalizeAgentBodyForRuntime(content, runtime, cmdNames) {
LOWbin/install.js734function rewriteLegacyManagedNodeHookCommands(settings, absoluteRunner, opts) {
LOWbin/install.js869function rewriteLegacyCodexHookBlock(content, absoluteRunner, opts) {
LOWbin/install.js911function reconcileCodexHooksJsonSessionStart(targetDir, opts = {}) {
LOWbin/install.js1015function buildCodexHookWindowsShimIR(scriptAbsPath, absoluteRunnerToken) {
LOWbin/install.js1075function ensureCodexHooksJsonSessionStart(targetDir, opts = {}) {
LOWbin/install.js1121function removeCodexHooksJsonSessionStart(targetDir) {
LOWbin/install.js1181function resolveOpencodeConfigPath(configDir) {
LOWbin/install.js1292function readGsdGlobalModelOverrides() {
LOWbin/install.js1331function readGsdEffectiveModelOverrides(targetDir = null) {
LOWbin/install.js1407function readGsdRuntimeProfileResolver(targetDir = null) {
LOWbin/install.js1671function convertClaudeToKiloPermissionTool(claudeTool) {
LOWbin/install.js1675function buildKiloAgentPermissionBlock(claudeTools) {
LOWbin/install.js1697function replaceRelativePathReference(content, fromPath, toPath) {
LOWbin/install.js1733function convertClaudeToCopilotContent(content, isGlobal = false) {
LOWbin/install.js1762function convertClaudeCommandToCopilotSkill(content, skillName, isGlobal = false) {
LOWbin/install.js1821function convertClaudeCommandToClaudeSkill(content, skillName, runtime = null, cmdNames = null) {
LOWbin/install.js1866function convertClaudeAgentToCopilotAgent(content, isGlobal = false) {
LOWbin/install.js1903function convertClaudeToAntigravityContent(content, isGlobal = false) {
LOWbin/install.js1932function convertClaudeCommandToAntigravitySkill(content, skillName, isGlobal = false) {
LOWbin/install.js1950function convertClaudeAgentToAntigravityAgent(content, isGlobal = false) {
LOWbin/install.js1988function extractFrontmatterAndBody(content) {
LOWbin/install.js2035function convertSlashCommandsToCursorSkillMentions(content) {
LOWbin/install.js2041function convertClaudeToCursorMarkdown(content) {
LOWbin/install.js2064function getCursorSkillAdapterHeader(skillName) {
LOWbin/install.js2090function convertClaudeCommandToCursorSkill(content, skillName) {
LOWbin/install.js2112function convertClaudeAgentToCursorAgent(content) {
LOWbin/install.js2154function convertSlashCommandsToWindsurfSkillMentions(content) {
LOWbin/install.js2159function convertClaudeToWindsurfMarkdown(content) {
LOWbin/install.js2182function getWindsurfSkillAdapterHeader(skillName) {
LOWbin/install.js2208function convertClaudeCommandToWindsurfSkill(content, skillName) {
LOWbin/install.js2230function convertClaudeAgentToWindsurfAgent(content) {
LOWbin/install.js2275function convertSlashCommandsToAugmentSkillMentions(content) {
LOWbin/install.js2279function convertClaudeToAugmentMarkdown(content) {
LOWbin/install.js2304function getAugmentSkillAdapterHeader(skillName) {
LOWbin/install.js2334function convertClaudeCommandToAugmentSkill(content, skillName) {
LOWbin/install.js2356function convertClaudeAgentToAugmentAgent(content) {
LOWbin/install.js2375function convertSlashCommandsToTraeSkillMentions(content) {
LOWbin/install.js2381function convertClaudeToTraeMarkdown(content) {
LOWbin/install.js2401function convertClaudeCommandToTraeSkill(content, skillName) {
LOWbin/install.js2418function convertClaudeAgentToTraeAgent(content) {
LOWbin/install.js2432function convertSlashCommandsToCodebuddySkillMentions(content) {
LOWbin/install.js2438function convertClaudeToCodebuddyMarkdown(content) {
LOWbin/install.js2456function convertClaudeCommandToCodebuddySkill(content, skillName) {
LOWbin/install.js2473function convertClaudeAgentToCodebuddyAgent(content) {
LOWbin/install.js2489function convertClaudeToCliineMarkdown(content) {
LOWbin/install.js2531function convertClaudeToCodexMarkdown(content) {
LOWbin/install.js2558function getCodexSkillAdapterHeader(skillName) {
LOWbin/install.js2622function convertClaudeCommandToCodexSkill(content, skillName) {
LOWbin/install.js2644function convertClaudeAgentToCodexAgent(content) {
LOWbin/install.js2755function stripCodexGsdAgentSections(content) {
LOWbin/install.js2945function findMultilineBasicStringClose(line, startIndex) {
LOWbin/install.js2962function advanceTomlMultilineStringState(line, multilineState) {
LOWbin/install.js3336function stripCodexHooksFeatureAssignments(content, ownership = null) {
LOWbin/install.js3414function getManagedCodexHooksOwnership(content) {
LOWbin/install.js3425function setManagedCodexHooksOwnership(content, ownership) {
118 more matches not shown…
Over-Commented Block68 hits · 56 pts
SeverityFileLineSnippet
LOW.coderabbit.yaml1# CodeRabbit configuration — gsd-build/get-shit-done
LOW.coderabbit.yaml21 # checks, line-level findings) which we want to keep.
LOWbin/install.js741 for (const entry of entries) {
LOWbin/install.js3481 // managed `gsd-*` names, and the legacy bare-table and sequence forms
LOWbin/install.js3681 // Find flat [[hooks]] array-of-tables entries (path === 'hooks', array === true).
LOWbin/install.js3801 legacyHooksSections.map(({ start, end }) => ({ start, end })),
LOWbin/install.js4041 // rejects. Accept TOML floats and store as JS Number.)
LOWbin/install.js4101 // pathShape: dotted path -> 'table' | 'array' | 'inline_parent' | 'key'
LOWbin/install.js4941 // GSD install before generic .claude → .codex conversion rewrites it.
LOWbin/install.js5081 // sentence-ending punctuation like `/gsd-help.` because `.` at end of
LOWbin/install.js6261 fs.mkdirSync(dest, { recursive: true });
LOWbin/install.js7921 }
LOWbin/install.js8021 // Save any locally modified GSD files before they get wiped.
LOWbin/install.js8041 // reflect the true pre-GSD state. Non-Codex runtimes skip this block.
LOWbin/install.js8201 // Runtime scope comes from docs/installer-migrations.md#runtime-configuration-contract-registry:
LOWbin/install.js8221 // no stdin TTY and therefore no way to answer prompt-user migration
LOWbin/install.js8261 blocked: [],
LOWbin/install.js8341 } else {
LOWbin/install.js9121 } catch (e) {
LOWbin/install.js9221 console.log(` ${green}✓${reset} Rewrote legacy bare-node managed-hook commands to absolute path (#2979)`);
LOWbin/install.js10421 // secondary `gsd-sdk` shim is left dangling under the npx cache and is NOT
LOWbin/install.js10461 // shells may have a different PATH — Windows cross-shell .cmd/no-ext
LOWbin/install.js10941 // Replace any existing entry — it may be stale (prior install of an
LOWbin/install.js11161 // install set can host the banner (e.g. Codex/Copilot/Cursor/Windsurf/
LOWagents/gsd-code-fixer.md221# but the shell snippet below is illustrative — adapt once config is parsed).
LOWagents/gsd-code-fixer.md3016. **Write the recovery sentinel** at `${phase_dir}/.review-fix-recovery-pending.json` containing `{worktree_path, branc
LOWagents/gsd-code-fixer.md321ff_status=0
LOWsdk/src/config.test.ts181 // model aliases from MODEL_PROFILES via resolveModel even when the user
LOWsdk/src/runtime-bridge-sync/index.ts81 errorKind: SyncErrorKind;
LOWsdk/src/query/verify.ts641 message: result.message,
LOWsdk/src/query/check-ship-ready.test.ts121 // the shell.
LOWsdk/src/query/check-ship-ready.test.ts221 // No interpolation site exists for those today, but locking the
LOWsdk/src/query/phase-lifecycle.ts881 // #3601: the end-of-section lookahead is DEPTH-AWARE. The named capture
LOWsdk/src/query/phase-lifecycle.ts941 // kebab-case slug, then -PLAN.md / -SUMMARY.md).
LOWsdk/src/query/phase-lifecycle.ts1241
LOWsdk/src/query/roadmap.test.ts601
LOWsdk/src/query/roadmap.test.ts741 // Heading slice is what got returned — original `### v0.9` heading
LOWsdk/src/query/config-mutation.ts561 } catch {
LOWsdk/src/query/commit.test.ts341});
LOWsdk/src/query/roadmap.ts221 // milestone's phase details inside a collapsible block whose <summary>
LOWsdk/src/query/roadmap.ts241 // ${escapedVersion} inline HTML in the summary text
LOWsdk/src/query/roadmap.ts301 // `i` flag ensures the `(?!Phase\s+\S)` lookahead matches PHASE/phase too
LOWsdk/src/query/roadmap.ts321 sectionEnd = sectionStart + sectionMatch[0].length + m.index;
LOWsdk/src/query/phase.ts501 // Build a map from plan ID → RawPlan for fast lookup.
LOWhooks/gsd-prompt-guard.js1#!/usr/bin/env node
LOWhooks/gsd-read-guard.js1#!/usr/bin/env node
LOWhooks/gsd-read-guard.js41 // Detection signals, in priority order:
LOWhooks/gsd-graphify-update.sh1#!/usr/bin/env bash
LOWhooks/gsd-session-state.sh1#!/usr/bin/env bash
LOWhooks/gsd-update-banner.js1#!/usr/bin/env node
LOWhooks/gsd-context-monitor.js1#!/usr/bin/env node
LOWhooks/gsd-read-injection-scanner.js1#!/usr/bin/env node
LOWhooks/gsd-workflow-guard.js1#!/usr/bin/env node
LOWhooks/lib/gsd-graphify-rebuild.sh1#!/usr/bin/env bash
LOWscripts/base64-scan.sh1#!/usr/bin/env bash
LOWscripts/prompt-injection-scan.sh1#!/usr/bin/env bash
LOWscripts/secret-scan.sh1#!/usr/bin/env bash
LOWscripts/build-hooks.js161 // from their before() hooks; fs.copyFileSync truncates then writes the
LOW.github/workflows/hotfix.yml1name: Hotfix Release
LOW.github/workflows/release-sdk.yml1# Release SDK Bundle
8 more matches not shown…
Magic Placeholder Names2 hits · 10 pts
SeverityFileLineSnippet
HIGHdocs/zh-CN/references/verification-patterns.md330DATABASE_URL=your-database-url-here
HIGHget-shit-done/references/verification-patterns.md330DATABASE_URL=your-database-url-here
Fake / Example Data7 hits · 8 pts
SeverityFileLineSnippet
LOWdocs/FEATURES.md2571- REQ-SKETCH-04: Sketches MUST use real-ish content, not lorem ipsum
LOWdocs/zh-CN/references/verification-patterns.md34grep -E "placeholder|lorem ipsum|coming soon|under construction" "$file" -i
LOWsdk/src/init-e2e.integration.test.ts55 execSync('git config user.email "test@test.com"', { cwd: tmpDir, stdio: 'ignore' });
LOWsdk/src/lifecycle-e2e.integration.test.ts70 execSync('git config user.email "test@test.com"', { cwd: tmpDir, stdio: 'ignore' });
LOWsdk/src/query/commit.test.ts22 execSync('git config user.email "test@test.com"', { cwd: tmpDir, stdio: 'pipe' });
LOWget-shit-done/references/verification-patterns.md34grep -E "placeholder|lorem ipsum|coming soon|under construction" "$file" -i
LOWget-shit-done/workflows/sketch.md236- Real-ish content, not lorem ipsum (use real field names from spike context if available)
Example Usage Blocks4 hits · 6 pts
SeverityFileLineSnippet
LOWhooks/lib/gsd-graphify-rebuild.sh4# Usage:
LOWscripts/base64-scan.sh7# Usage:
LOWscripts/prompt-injection-scan.sh4# Usage:
LOWscripts/secret-scan.sh4# Usage:
Verbosity Indicators2 hits · 3 pts
SeverityFileLineSnippet
LOWsdk/src/prompt-sanitizer.ts103 // Step 1: Resolve @-file references to inline content
LOWsdk/src/prompt-sanitizer.ts106 // Step 2: Strip interactive-only patterns
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippet
LOWscripts/base64-scan.sh183 # Check if decoded content is mostly printable text (not random binary)