원클릭으로
g-skl-setup
Initialize gald3r in a project — folder structure and template files for task management.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Initialize gald3r in a project — folder structure and template files for task management.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Triage non-code defects (spec_defect, policy_incongruity, design_gap): assess risk, auto-fix bounded safe issues, and log the rest as tracked bugs.
Compress the NON-gald3r sections of AGENTS.md/CLAUDE.md (and *memory*.md) to cut token overhead, while strictly preserving the install-managed gald3r SECTION ranges, code blocks, and URLs. Dry-run by default; apply only after confirmation.
Own and manage all feature data — FEATURES.md index, features/ individual files, staging lifecycle (staging→specced→committed→shipped), harvest source collection, and feature promotion. Single source of truth for everything feature-related.
Create well-structured git commits following gald3r conventions, with proper type prefixes, task references, and clean trailers (no AI co-author footers per C-021).
Tiered .gald3r/ health and intervention system. L1=triage (structural), L2=diagnosis (plan coherence), L3=surgery (cross-subsystem interface audit), L4=ecosystem (linked project negotiation). Replaces g-skl-medic.
gald3r_muninn MCP — query the local codebase knowledge graph for impact analysis, caller chains, dependencies, and symbol search. Clean-room rewrite (T1147 epic, T1153-T1158) of the GitNexus integration; auto-loaded by the example_app MCP server from docker/gald3r/tools/plugins/muninn/. Wire into g-go-code Step b0 Impact Scan before any implementation.
| name | g-skl-setup |
| description | Initialize gald3r in a project — folder structure and template files for task management. |
| token_budget | medium |
| subsystem_memberships | ["PROJECT_IDENTITY_SETUP"] |
First-time setup of gald3r in a project. @g-setup command.
This skill creates the SLIM layout. Do not create the folders marked "full only" below.
| Folder | Slim | Full (<gald3r_source> only) |
|---|---|---|
tasks/, bugs/, features/, subsystems/, reports/, logs/ | ✅ | ✅ |
config/ (HEARTBEAT.md, SPRINT.md, AGENT_CONFIG.md) | ❌ | ✅ |
experiments/ (EXPERIMENTS.md, HYPOTHESIS.md, SELF_EVOLUTION.md) | ❌ | ✅ |
linking/ (README.md, INBOX.md) | ❌ | ✅ |
vault/ | ❌ | ✅ |
phases/ (legacy v2) | ❌ | ✅ |
First-run setup legitimately writes into .gald3r/ (.identity, the folder layout, PROJECT.md/PLAN.md/CONSTRAINTS.md, …), but the pre-tool-call gald3r-guard hook (g-hk-pre-tool-call-gald3r-guard) denies unsupervised Edit/Write to .gald3r/ paths per g-rl-33 (".gald3r/ Folder Gate"). Setup is an authorized first-run write, so it must run with the guard bypass set — otherwise the guard false-denies legitimate scaffolding (BUG-179 secondary half).
Set GALD3R_HOOK_BYPASS=1 for the scaffold writes only, then clear it once the .gald3r/ control plane exists. Keep the bypass scoped to this setup step — do not export it globally or leave it set for the rest of the session, so the guard keeps blocking unsupervised .gald3r/ writes after setup completes.
# Windows / PowerShell — scope the bypass to the setup scaffold writes
$env:GALD3R_HOOK_BYPASS = '1'
try {
# ... perform the first-run .gald3r/ scaffold writes (Steps 1-8 below) ...
} finally {
Remove-Item Env:GALD3R_HOOK_BYPASS -ErrorAction SilentlyContinue
}
# macOS / Linux / Git Bash — scope the bypass to the setup scaffold writes
export GALD3R_HOOK_BYPASS=1
# ... perform the first-run .gald3r/ scaffold writes (Steps 1-8 below) ...
unset GALD3R_HOOK_BYPASS # always clear it once .gald3r/ exists
GALD3R_ACTIVE_AGENT=<agent_id> is the equivalent allow signal when setup runs under an active gald3r agent — either one satisfies the guard. Regression guard: after setup clears the bypass, an unsupervised Edit/Write to .gald3r/ (no bypass, no active agent) must still be denied by the hook. See .claude/rules/g-rl-33-enforcement_catchall.md and the guard hook g-hk-pre-tool-call-gald3r-guard.
Before any folder or file creation, verify the target install path is not a Workspace-Control controlled_member or migration_source repository. g-skl-setup is for installing a full standalone gald3r project; member repositories use a marker-only .gald3r/ shape that is owned by g-wrkspc-spawn / g-wrkspc-adopt plus the bootstrap helper, NOT full setup.
gald3r workspace member guard --target-path "<absolute_install_target>"
Outcomes:
0 (ALLOW) — target is the workspace control project, outside any workspace, or a template directory; proceed with full setup.1 (BLOCK) — target is a Workspace-Control controlled_member or migration_source. Stop. Direct the user to either:
@g-wrkspc-spawn (new empty member) or @g-wrkspc-adopt (existing standalone gald3r project) if the target should be a workspace member. Both paths use gald3r workspace member bootstrap to create the marker pair (.identity + PROJECT.md) — they do NOT install the full gald3r control plane in members.2 (ERROR) — manifest unparseable. Resolve before continuing. If the project is genuinely standalone (no .gald3r/linking/workspace_manifest.yaml in any ancestor), the helper returns ALLOW; an actual exit 2 indicates a broken manifest.Installed projects ship the same helper at gald3r workspace member guard. External template repos (<ECOSYSTEM_ROOT>/<template_slim>, <ECOSYSTEM_ROOT>/<template_full>, <ECOSYSTEM_ROOT>/<template_adv>) are the only legitimate exception for live .gald3r/ writes outside the control project.
Run this after Step 0 passes and before any .gald3r/ folder creation. Skip entirely if Step 0 blocked (member-repo targets do not need this check).
1. Is this a git repo?
git rev-parse --is-inside-work-tree
"This directory is not a git repo. Initialize git? [Y/n]"
→ Y: git init && git commit --allow-empty -m "chore: initial commit"
→ N: warn "g-go-go autopilot requires git; some features will not work" then continue
2. Does a main branch exist?
gald3r uses a feature-branches-only model — a single permanent main branch plus
short-lived feature/* and fix/* branches. There is no long-lived dev/test branch
(see g-rl-02-git_workflow). Confirm main exists as the integration target:
git branch --list main
main exists, skip.git rev-parse --abbrev-ref HEAD). If the repo
uses a differently-named default (e.g. master), note it; otherwise offer (default Y):
"No 'main' branch found. Create main from current HEAD? [Y/n]"
→ Y: git branch -M main
[if remote exists] git push --set-upstream origin main
→ N: warn "g-go-go autopilot auto-merge will MERGE-BLOCKED without a main branch"
2b. Migrate an existing dev-model repo (USER-SAFETY — T1535 / BUG-099)
A repo created under the retired dev/test promotion model may still carry a
long-lived dev branch. The old auto-merge defaulted to that dev branch, which was
the root cause of the BUG-099 history-loss class. Detect and offer a safe,
confirmation-gated migration — never auto-delete a user branch:
git branch --list dev
dev branch exists. Compute its relationship to main:
git rev-list --left-right --count main...dev
Then offer (default N — destructive-adjacent, so do NOT default Y):
"Legacy 'dev' branch detected (old promotion model). gald3r is now
feature-branches-only -> main. Promote dev's unique work onto main, then
retire dev? This will NOT delete dev until you confirm a second time. [y/N]"
→ Y: 1. git checkout main
2. git merge --ff-only dev (if dev is strictly ahead — safe fast-forward)
- if FF is not possible, STOP and report: "dev and main diverged
(N ahead / M behind). Manual review required — not auto-merging."
3. Only after a clean FF, offer separately:
"Retire (delete) the local 'dev' branch now? [y/N]"
→ Y: git branch -d dev (safe delete; refuses if not merged)
→ N: leave dev in place; print "dev retained — delete manually when ready"
→ N: print "Left dev in place. You remain on the legacy model until migrated."
dev branch exists and never performs a
force-delete (-D) or a non-fast-forward merge without explicit user confirmation.3. Remote check (info only — never blocks setup)
git remote -v
"No git remote configured. g-go-go autopilot cross-session merges require push access. Add later: git remote add origin <url>"All prompts default to Y and are non-blocking — declining any prompt adds a warning but does not stop the setup. The agent should present options as numbered choices in its response, then run the chosen commands.
Offered for all project types (3d_modeling and content_creation benefit most; software_development repos with large binaries also). Not enabled by default — must be explicitly opted in.
"Enable Git LFS for binary files? Recommended for 3d_modeling / content_creation. [y/N]"
→ Y:
git lfs install
copy assets/gitattributes-lfs.template → <project>/.gitattributes
(if .gitattributes exists, append the gald3r LFS block under a
'# <!-- gald3r LFS SECTION -->' marker rather than clobbering it)
git add .gitattributes
→ N (default): skip — existing repos are unaffected.
Storage-cost note to surface: GitHub LFS bills for storage + bandwidth beyond
the free quota (1 GB / 1 GB-month on free plans); large media histories can exceed
it quickly. Use LFS deliberately, not as a default. Verify patterns apply with
git check-attr filter <file> (expect filter: lfs).
The template (assets/gitattributes-lfs.template) covers: .psd .ai .fbx .obj .blend .max .png .jpg .gif .mp4 .mov .wav .zip .glb .gltf and similar binaries.
□ .gald3r/TASKS.md exists AND > 20 lines?
□ .gald3r/tasks/ has > 5 files?
□ PROJECT.md has non-template content?
→ YES: EXISTING project → ask: Merge / Skip / Reset (DESTRUCTIVE)
→ NO: FRESH install → proceed
Call gald3r_install MCP tool (if available):
gald3r_install(project_path="{absolute_path}", use_v2=True)
If gald3r_install unavailable, create manually:
.gald3r/, .gald3r/tasks/, .gald3r/features/, .gald3r/bugs/, .gald3r/subsystems/, .gald3r/reports/, .gald3r/logs/, .gald3r/specifications_collection/.gald3r/specifications_collection/README.md with the index template (see template in <ECOSYSTEM_ROOT>/<template_full>/.gald3r/specifications_collection/README.md).gald3r/learned-facts.md from the template in <ECOSYSTEM_ROOT>/<template_full>/.gald3r/learned-facts.md.gald3r/.identity contains vault_location, create {vault_location}/log.md as a seed file (one header line — append_log() will populate it on first ingest).gald3r/.identity contains vault_location, create {vault_location}/projects/{project_name}/ directory; this is where repos.txt and repo_tracker.json will live when github_sync.py runs.gald3r/.identity contains vault_location and {vault_location}/obsidian_setup.md does not already exist, copy <ECOSYSTEM_ROOT>/<template_full>/.gald3r/vault/obsidian_setup.md (or the installed equivalent at {skill_root}/reference/obsidian_setup.md) to {vault_location}/obsidian_setup.md. This seeds the one-page Obsidian setup guide so vault users can find it immediately.TASKS.md, add a research log section below the task listCONSTRAINTS.md with:
ID | Status | Name | Scope | One-line summary<!-- CONSTRAINT SCOPE: local-only (default) | inheritable (propagate to children on spawn) | shareable (peers opt-in) | ecosystem-wide (all topology members) -->
3b. Skill trust-level warning (C-032 — non-blocking): when the install bundles or copies any skills (template skill packs, adv-tier skill_packs), apply the same provenance check as g-skill-pack-add step 3b — surface a non-blocking warning for any skill whose skill_trust_level: is community or unset (trust level, source, allowed-tools: reminder, inspect-before-first-invocation). Slim setup ships only core skills, so this normally produces no warning; it fires when a non-core pack is added during or after setup. Canonical wording: skl-skill-create/SKILL.md → ### skill_trust_level: declaration.
python -c "import uuid; print(uuid.uuid4())" > .gald3r/.identity
4b. Set project_type (T1280):
Ask the user "What kind of project is this?" with numbered choices, then write
the chosen value to .gald3r/.identity as project_type=<value> (key=value
format, canonical lowercase). Pressing enter selects the default.
What kind of project is this?
1. software_development (default — enables GitHub PR/issue integration, code review, etc.)
2. content_creation
3. 3d_modeling
4. research_analysis
5. freeform
[1]
software_development.--project-type=<value> CLI flag to skip the prompt.freeform.Project type set to: {value}.project_type gates which Workflow Profile, Integration Bundle,
and Command Set are active (e.g. GitHub integration activates only for
software_development).4c. Public-publish history mode (T423 — explicit, OFF-by-default safety toggle):
Ask only when the project may graduate/publish to a public repo (i.e. graduation_tier
is dual/triple, or the user asks for a public sibling). Otherwise skip silently and
leave the safe default in place. This is also asked on @g-setup --upgrade-existing
so existing projects can opt in deliberately.
Public publish: how should git history be handled when you publish to a public repo?
1. carry (default) — keep full git history. Non-destructive, safe.
2. scrub (Mode A) — publish with ZERO git history for IP protection.
DESTRUCTIVE: the public repo's history is replaced and cannot
be recovered there. Requires explicit confirmation at publish time.
[1]
carry — never scrub by default.--publish-history=<carry|scrub> CLI flag to skip the prompt..gald3r/.identity as publish_history_mode=<carry|scrub>
(key=value, lowercase). If the project never publishes publicly, the key may be omitted
(readers treat an absent value as carry).scrub here only RECORDS the intent; the destructive operation still requires an
explicit -ConfirmScrub (or engine equivalent) at publish time (g-skl-release / graduate).Public-publish history mode set to: {value} (and, for scrub, a one-line reminder
that publish will still require -ConfirmScrub).Verify structure (slim v3 layout — ground truth from .gald3r):
.gald3r/ ✅
├── .identity ✅
├── .gitignore ✅
├── TASKS.md ✅
├── PLAN.md ✅ ← master strategy (above PRDs)
├── PROJECT.md ✅ ← mission, goals, Project Linking
├── CONSTRAINTS.md ✅ ← non-negotiable constraints
├── BUGS.md ✅ ← bug index (root)
├── SUBSYSTEMS.md ✅
├── IDEA_BOARD.md ✅
├── FEATURES.md ✅ ← PRD index
├── learned-facts.md ✅ ← agent-captured learning (updated via /g-learn)
├── features/ ✅ ← individual PRD files
├── bugs/ ✅ ← optional per-bug detail files
├── reports/ ✅
├── logs/ ✅
├── subsystems/ ✅ ← per-subsystem spec files
├── specifications_collection/ ✅ ← incoming specs from stakeholders
└── tasks/ ✅
docs/ ✅
NOT in slim:
config/,experiments/,linking/,vault/,phases/These belong in<gald3r_source>only. Do not create them here. Whenlinking/IS created (full tier): also seed.gald3r/linking/capabilities.mdusing the template at<ECOSYSTEM_ROOT>/<template_full>/.gald3r/linking/capabilities.md. Replace{project_slug}and{project_name}placeholders with the actual project name. Replace{YYYY-MM-DD}with today's date.
Create PROJECT.MD scaffolding:
.gald3r/PROJECT.md — include a Project Linking section (parents, children, siblings); starts with relationships: noneSubsystem Discovery (run after folder creation):
Scan the project to identify subsystems. For each, create a spec file in .gald3r/subsystems/:
What to scan:
src/ subdirectories → candidate subsystemsFor each identified subsystem, create spec with:
locations:
code: [source file paths]
skills: [relevant gald3r skills]
agents: [relevant gald3r agents]
commands: [relevant gald3r commands]
config: [config files]
db_tables: [owned tables]
Plus: Responsibility, Data Flow, Architecture Rules, When to Modify sections.
Classify as:
Update SUBSYSTEMS.md with the index table, sub-features table, integrations table, and mermaid interconnection graph.
Write skills lock file (T1043):
After platform skill directories are placed (whether by gald3r_install MCP, by bin/install.js, or manually), write gald3r-skills-lock.json at project root via:
gald3r skills-lock
SKILL.md so future runs can detect tamper / drift.-Action VERIFY during gald3r validate runs (engine verb, T520).-Action UPGRADE -SourceRoot <<gald3r_source> path> to classify each installed skill as unchanged | local-modified | upstream-changed | both-changed | new | removed before pulling a new gald3r version.docs/SKILLS_LOCK_FORMAT.md.8b. Codebase Graph Initialization (gald3r_muninn, T1149) — non-blocking, always optional:
Check index state via graph_status (MCP) or python .claude/skills/g-skl-muninn/scripts/graph_impact.py -File <any source file> -Json. If it reports index_missing / warning: not_indexed, offer to build it now:
python -m docker.gald3r.tools.plugins.muninn.indexers.python_indexer --root . # Python sources
node docker/gald3r/tools/plugins/muninn/indexers/ts_indexer.js --root . # TS/JS sources (needs Node.js)
The gald3r_muninn indexers run natively on Windows, macOS, and Linux (clean-room rewrite — no WSL2/Docker required, unlike the deprecated GitNexus). If Python or Node.js is missing, skip that indexer and continue — setup never blocks on graph init, and if the user declines the index simply stays absent (g-go-code Step b0 falls back to ripgrep).
Auto-wire the post-commit refresh hook (idempotent, after user confirmation) so the index stays fresh:
PowerShell (Windows — native):
$hookFile = ".git/hooks/post-commit"
# use the active platform's hook path (.cursor/hooks/, .claude/hooks/, ...)
$hookLine = "uv run python .cursor/hooks/g-hk-graph-update.py"
$existing = if (Test-Path $hookFile) { Get-Content $hookFile -Raw } else { "" }
if ($existing -notlike "*$hookLine*") { Add-Content -Path $hookFile -Value $hookLine }
Bash (Linux / macOS / Git Bash on Windows):
HOOK_FILE=".git/hooks/post-commit"
# use the active platform's hook path (.cursor/hooks/, .claude/hooks/, ...)
HOOK_LINE="uv run python .cursor/hooks/g-hk-graph-update.py"
grep -qF "$HOOK_LINE" "$HOOK_FILE" 2>/dev/null || { printf '%s\n' "$HOOK_LINE" >> "$HOOK_FILE"; chmod +x "$HOOK_FILE"; }
Re-running setup does not duplicate the line; the hook exits 0 on all platforms even if indexing fails. See the Codebase Graph (gald3r_muninn) section below.
.gald3r/PROJECT.md and confirm mission and goals.gald3r/subsystems/ for accuracy.gald3r/PLAN.md and Feature under features/ as needed@g-project (Project Linking section)) when readyskill_packs/ directory — run .\skill_packs\{pack}\install.py for infrastructure, ai-ml-dev, startup-tools, and other packsThe codebase graph (gald3r_muninn) indexes Python and TypeScript/JavaScript source so g-go-code Step b0 Impact Scan can answer "what breaks if I change this file?" with real import/call edges instead of a linear grep. It is optional — when absent, Step b0 falls back to ripgrep (non-blocking).
What it does: builds a local SQLite graph at ~/.gald3r/muninn.db (override with MUNINN_DB_PATH). graph_impact / graph_callers / graph_callees / graph_deps / graph_status query it.
How to initialize (step 8b above): run the Python + TypeScript indexers once, then let the post-commit hook (g-hk-graph-update.py) refresh changed files on every commit.
OS support matrix (clean-room rewrite — supersedes the WSL-only GitNexus):
| OS | Python indexer | TypeScript indexer | Notes |
|---|---|---|---|
| Windows | ✅ native | ✅ native (needs Node.js) | No WSL2/Docker required |
| macOS | ✅ native | ✅ native (needs Node.js) | — |
| Linux | ✅ native | ✅ native (needs Node.js) | — |
If a runtime (Python / Node.js) is missing, skip that indexer — the graph simply indexes the languages it can, and Step b0 falls back to ripgrep for the rest. Initialization, the post-commit hook, and the gald3r_install post-install offer are all non-blocking.
setup_gald3r_project.ps1)gald3r has two distinct setup entry points with non-overlapping responsibilities. They are not alternatives that ask the same questions twice:
| Entry point | Owns | Does NOT do |
|---|---|---|
setup_gald3r_project.ps1 (root installer, run from a shell) | Platform selection (-Platforms, the interactive platform picker, -Platform all), copying the .gald3r_sys/ payload + per-platform IDE dirs into the target, section-marker merge of AGENTS.md/CLAUDE.md/.gitignore, JSON key-merge of platform config, and v1/v2/v3 version detection on upgrade | Author project mission/goals or scaffold the .gald3r/ control plane content |
@g-setup (this skill, run in-session) | The .gald3r/ control-plane scaffold — folder layout, PROJECT.md/PLAN.md/CONSTRAINTS.md/SUBSYSTEMS.md, identity files, subsystem detection, codebase-graph init offer | Platform selection — it does not re-prompt for or deploy IDE platform dirs |
Design decision (T1209 AC6 / T1275): @g-setup delegates platform selection to the root installer; it does not re-prompt in-session. The platform picker (-Platforms / interactive prompt in setup_gald3r_project.ps1) is the single source of truth for which IDE surfaces (.cursor/, .claude/, .codex/, …) get deployed. Re-implementing a second platform prompt inside @g-setup would duplicate that logic and risk drift.
Recommended order for a brand-new project:
setup_gald3r_project.ps1 -TargetPath <dir> (it prompts for platforms if -Platforms is omitted) — this lays down .gald3r_sys/ + the chosen IDE platform dirs and merges the marker-managed root files.@g-setup in-session to scaffold and personalize the .gald3r/ control plane (mission, goals, subsystems, first task).If a user invokes @g-setup on a project that has no IDE platform dirs yet, point them at setup_gald3r_project.ps1 for platform deployment rather than prompting for platforms here.
The gald3r engine — a deterministic Mode-A core (no LLM calls) that the slimmed skills
call for state CRUD (tasks, bugs, features, prds, ideas, constraints, subsystems, release,
vault) and to serve the centralized judgment prompts — ships as a compiled binary, not
readable source (IP leak-stop, T1645). .gald3r_sys/engine/ in this install contains only
a stub README; the zero-IP resolver .gald3r_sys/scripts/gald3r_bin.py finds the engine
(GALD3R_BIN env var → gald3r on PATH → bundled .gald3r_sys/bin/ → dev source).
g-install-agent command (/g-install-agent
in Claude Code, @g-install-agent in Cursor) — it downloads the signed, SHA-256-verified
gald3r binary from the public Gald3r-Labs/gald3r_agent releases into the gald3r home
bin/ (T1615). Verify with gald3r --version.gald3r <verb> (or MCP gald3r_*).SKILL.full.md fallback — nothing points outside the install.