code-forge skill
아키텍처와 클린 코드를 중심으로 하는 인사이드-아웃(inside-out) 워크플로우를 통해 설계 청사진이나 구두 요구사항으로부터 구현 코드를 생성합니다.
- GitHub 스타
- 211
- 파일
- 1
- 마지막 커밋
- 2026년 10월 24일
- 라이선스
- MIT
- 허용된 도구
- —
code-forge skill은 무엇을 하나요?
code-forge은(는) agent skill입니다. 아키텍처와 클린 코드를 중심으로 하는 인사이드-아웃(inside-out) 워크플로우를 통해 설계 청사진이나 구두 요구사항으로부터 구현 코드를 생성합니다.
skill의 SKILL.md에서 생성된 요약입니다.
code-forge skill 정보
설계 청사진이나 구두 요구사항을 기능적인 코드로 전환하려는 개발자가 아키텍처의 무결성을 유지하기 위해 이 SKILL을 사용합니다. 시스템의 가장 안쪽 레이어부터 시작하여 바깥쪽으로 나아가는 인사이드-아웃 구현 워크플로우를 따르며, 빌드가 진행됨에 따라 모든 의존성이 충족되도록 보장합니다. 이 프로세스는 아키텍처, 클린 코드, 도메인 주도 설계(DDD), 보안 코딩 등 높은 표준을 강제하기 위한 여러 전문 프레임워크를 활용합니다.
사용자가 코드 구현, 빌드 또는 생성을 지시할 때 에이전트는 이 SKILL을 로드해야 합니다. 구현 파일과 그에 대응하는 테스트를 함께 생성하여, 테스트가 사후 작업이 아닌 로직과 동시에 작성되도록 합니다. 워크플로우는 매우 구조화되어 있어, 진행하기 전에 승인된 설계 상태와 특정 설계 레벨이 필요합니다. 사용자는 레이어별 또는 컴포넌트별 리뷰와 같은 다양한 리뷰 모드를 통해 진행 속도를 제어할 수 있으며, 생성된 결과물이 기대치 및 설정된 프로젝트 컨텍스트와 일치하는지 확인할 수 있습니다.
agent가 수행할 수 있는 작업
- 1설계 청사진으로부터 구현승인된 설계 문서와 특정 아키텍처 레이어를 따라 프로덕션 준비가 된 코드를 생성합니다.
- 2구두 요구사항으로부터 코드 빌드공식적인 설계 문서가 없는 경우 구조화된 구현 계획과 코드를 생성합니다.
skill의 SKILL.md를 기반으로 작성되었습니다. 모든 사용 사례는 해당 문서의 인용구와 대조 확인되었습니다.
code-forge skill 설치 방법
각 명령은 skill 폴더를 클라이언트의 skills 디렉터리에 복사합니다. 클라이언트를 재시작하거나 새 세션을 시작하여 로드하세요.플러그인에 code-forge skill 설치
/plugin marketplace add techygarg/lattice /plugin install lattice@lattice
Claude Code에 code-forge skill 설치
~/.claude/skills/code-forge/SKILL.md
$ npx degit techygarg/lattice/skills/code-forge ~/.claude/skills/code-forgeClaude Code (project)에 code-forge skill 설치
.claude/skills/code-forge/SKILL.md
$ npx degit techygarg/lattice/skills/code-forge .claude/skills/code-forgeCodex에 code-forge skill 설치
~/.agents/skills/code-forge/SKILL.md
$ npx degit techygarg/lattice/skills/code-forge ~/.agents/skills/code-forgeGemini CLI에 code-forge skill 설치
~/.gemini/skills/code-forge/SKILL.md
$ npx degit techygarg/lattice/skills/code-forge ~/.gemini/skills/code-forgeClaude.ai에 code-forge skill 설치
npx degit techygarg/lattice/skills/code-forge code-forge && zip -r code-forge.zip code-forge # claude.ai → Customize → Skills → + → Create skill → Upload a skill → code-forge.zip
SKILL.md
GitHub에서 보기Code Forge
Required Skills
Read and apply:
framework:knowledge-priming-- Load project context (stack, architecture, conventions) so implementation matches the real project. (always)framework:context-anchoring-- Find and load the feature's context anchor doc; enrich it as implementation decisions are made (Create / Load / Enrich behaviors). (always)framework:learning-harvest-- Load prior operational learnings to inform implementation at session start; harvest new ones at session end. (always)framework:collaborative-judgment-- Surface genuine judgment calls as structured options instead of silently assuming. (always)framework:architecture-- Layer placement, dependency direction, structural validation. (always)framework:clean-code-- Craft guardrails: SRP, naming, complexity, error handling. (always)framework:domain-driven-design-- Aggregates, entities, value objects, domain services. (conditional: domain-layer components only)framework:secure-coding-- Trust bounds, injection prevention, secrets handling. (conditional: trust-boundary code only)framework:test-quality-- AAA structure, isolation, assertion quality, naming. (always when writing tests)
Additional Instructions
STOP: Before Step 1, read additional_instructions.code_forge (one line or a list) from .lattice/config.yaml. No file or no key → skip silently.
When lines are found:
- Show them verbatim under "Additional instructions (from config):".
- Highest priority — apply them for the whole session, including on resume. On any conflict with anything else in this skill — steps, gates, STOP rules — or with its Required Skills, standards documents, or operational learnings, the config line wins.
Workflow
Step 1: Establish Implementation Context
- Run
framework:learning-harvestLoad behavior. Focus hint: "implementation session — focus: implementation craft, quality signals, reliability". - Run
framework:context-anchoringDocument Discovery: scan the context base directory (per the atom's Config Resolution) for an existing anchor doc covering this feature's implementation.- Found → Load behavior. Present the structured acknowledgment: feature name, status, decision count, open questions, constraints. STOP: Honor every logged decision and constraint as an active commitment.
- Not found → ask the user: "Is there a design doc or blueprint for this feature, or do we work from what we've discussed?" Accept either answer gracefully:
- Doc provided → load it and follow it.
- Proceed without → all atom rails still apply; there is simply no approved design doc to reference. Work from the verbal requirements in conversation.
Design completeness check — run both gates before Step 2 (no context doc exists → skip both, proceed as "Without approved design"):
Check 1 — status: Read the context doc frontmatter status.
approved→ pass.complete→ this feature was already implemented. If the current request is new scope, recommend/design-blueprintfor a fresh design pass; if the user confirms proceeding on the existing design, continue as "With approved design" (Check 2 still applies).- Anything else (including
draftor a missing field) → STOP: "Context doc not approved (status: [value]). Run/design-blueprintfirst. Proceed anyway?" On confirmation → log it in the Decisions Log and continue as "Without approved design".
Check 2 — levels present: Scan the body for ## Design: Level 3 and ## Design: Level 4.
- Both present → pass.
- Either missing → STOP: "Missing [Level 3 / Level 4 / both]. Proceed anyway?" On confirmation → log the absent levels in the Decisions Log and treat them as gaps to fill during implementation.
Both pass → proceed as "With approved design".
Step 2: Plan Implementation Order
With approved design: extract the component list and layer assignments from the context anchor doc. Use the Level 2 (Components) decisions for layer placement and Level 3 (Interactions) for dependency flow.
Without approved design: classify the required components into architecture layers using the layer definitions from framework:architecture. For each component determine:
- What is its primary responsibility? (business rules, data access, coordination, external I/O)
- Which layer in the loaded architecture doc matches that responsibility?
- What dependency constraints apply to that layer?
If framework:architecture resolved no layer definitions (neither defaults nor a custom doc), surface it: "No architecture rules available. Run /architecture-refiner to define your architecture standards. Proceeding without architecture guidance." Continue with the remaining atom rails.
Present the proposed layer assignments to the user for approval before proceeding.
In both cases, plan an inside-out implementation order following the dependency direction from the loaded architecture doc — start at the innermost layer (no outward dependencies) and work outward, so each layer's dependencies already exist when it is built.
Classify each operation per the flow patterns in the loaded architecture doc (e.g., command vs query flows, or the equivalent distinction in your architecture style).
Present the implementation plan — ordered component list, layer assignments, flow classifications — and confirm with the user before writing code. If the user rejects or corrects the plan, revise and re-present it. STOP: Never start coding on an unagreed plan.
After the plan is approved, ask the user to choose a review mode:
"How should we review the implementation?"
- Layer-by-layer (recommended) — implement each layer fully, pause for review before the next. One review point per layer.
- Full autonomy — implement everything end-to-end, present the complete result. One review point at the end. (If a blueprint exists, still pause on any deviation from the approved design.)
- Component-by-component — pause after each individual component for feedback. Maximum review points.
Default to layer-by-layer if the user expresses no preference.
Step 3: Implement Per Component
For each component in planned order, generate code and tests together — tests are not an afterthought.
Every component:
- Prefer the simpler path first. Before writing custom code: does a stdlib function, platform built-in, or existing dependency already cover this? If yes, use it. Can it be expressed in shorter code? Use that. Write custom code only when the simpler options genuinely fall short.
- Place in the correct architecture layer per
framework:architecture; dependency direction follows the loaded architecture rules. - Apply
framework:clean-codeself-validation during generation. Inline checks: SRP compliance, meaningful naming, low cyclomatic complexity, proper error handling, no magic values, clean function signatures, no dead code, appropriate abstraction level, clear control flow, minimal comments (the code documents itself). - Write tests using
framework:test-qualityself-validation. - Run what you wrote, where the environment allows: execute the component's tests before presenting and include the result in the compliance note. If execution is not available, say so — never imply tests passed when they were only written.
Conditional checks per component:
- Domain layer → apply
framework:domain-driven-designself-validation. - Trust boundary (HTTP handler, external API call, user-input processing, file I/O) → apply
framework:secure-codingself-validation. - Blueprint exists AND Level 4 was confirmed present in Step 1 → verify the component fulfills its L4 (Contracts) specification; flag any deviation from the agreed contract. If the user proceeded without L4 (Check 2 failed), skip this check — there are no contracts to verify against.
Post-generation verification (every component, all review modes):
After generating each component, before presenting it to the user:
- Run the Self-Validation Checklist from each applicable atom against every function/class in the component. Atoms use imperative STOP-verify language — follow it literally.
- Run the Active Anti-Pattern Scan from each applicable atom; check every box on the scan list.
- Violations found → fix before presenting.
- Judgment calls flagged (see each atom's Ambiguity Signals) → collect them and present via the
framework:collaborative-judgmentprotocol before showing code. Never silently resolve. - All checks pass with no flagged judgment calls → present with a brief compliance note ("All clean-code, DDD checks pass") — one line when clean; verbose only when reporting violations and fixes.
Pacing — follow the user's chosen review mode:
- Layer-by-layer: implement all components within a layer, present the full layer (code + tests) for review before starting the next layer.
- Full autonomy: implement all layers continuously; present the complete implementation (all code + tests) at the end, then skip to Step 4.
- Component-by-component: present each component with its tests individually; wait for approval before the next.
- Exception (all modes): a component needs a significant deviation from the plan (new dependency, changed contract, unexpected complexity) → STOP: pause immediately and discuss before continuing, regardless of the chosen review mode.
Step 4: Cross-Component Verification
These checks verify architecture coherence, not code quality (already verified per-component in Step 3). After all components are implemented:
- With blueprint: verify interaction flows match the L3 (Interactions) design — every designed interaction is traceable in the code.
- Dependency direction: apply
framework:architectureverification across all components — inter-component dependency direction follows the loaded architecture rules; no layer imports from a layer it is not permitted to depend on. - Zero Implementation Rule: check that no new components, interactions, or contracts were introduced beyond the Step 2 plan. Something added → flag it — it may be necessary, but it must be a conscious decision, not scope creep.
- Final security scan: apply
framework:secure-codingacross component boundaries — data flowing between components crosses trust bounds safely. - Learnings check: if operational learnings were loaded in Step 1, verify that previously-flagged patterns did not recur in this implementation.
Step 5: Enrich Context
Throughout Steps 3-4, use framework:context-anchoring Enrich behavior to keep the living doc current:
- Add key files as created — path + role in the doc's Key Files table (skip a path already listed).
- Capture implementation decisions — library choices, pattern selections, deviations from the blueprint, tradeoffs made, as Decisions Log entries (decision, reasoning, alternatives considered).
- Resolve open questions — when a design-phase question gets answered during implementation, log the answer as a decision entry AND remove the question from the Open Questions list.
- No context doc exists and significant implementation decisions were made → suggest creating one.
Harvest learnings: run framework:learning-harvest Harvest behavior. Session context: "implementation session — code generation from design contracts". Synthesize and propose cross-cutting patterns from this session — implementation gotchas, design-to-reality gaps, library/framework lessons. The user confirms what enters the document. STOP: run this before closing the feature lifecycle below.
Close the feature lifecycle: write status: complete into the context doc frontmatter. STOP: required discrete file edit.
STOP: do not write status to requirement_doc. The requirement's status belongs to whoever manages it — a human, or an external system it may live in. This molecule manages only its own context doc.
After enriching the context doc, recommend review:
"Implementation complete. Recommend running
/reviewon the generated code before considering the feature done — it provides an independent quality assessment against the same atom standards, catches issues the generator may be blind to, and captures learnings for future sessions."
이 스킬의 파일
1code-forge skill 질문
Claude Code에 code-forge skill을 어떻게 설치하나요?
npx degit techygarg/lattice/skills/code-forge ~/.claude/skills/code-forge를 실행합니다. Claude Code는 ~/.claude/skills(모든 프로젝트) 또는 .claude/skills(한 프로젝트)에서 skills를 로드하며, 설명이 작업과 일치할 때 skill을 사용합니다.
code-forge skill을 사용할 수 있는 클라이언트는 무엇인가요?
Agent Skills 형식을 읽는 모든 클라이언트(Claude Code, Codex, Gemini CLI, claude.ai(ZIP으로 업로드))가 사용할 수 있습니다. skill 내 스크립트는 클라이언트가 코드 실행을 허용하는 경우에만 실행됩니다.
설계 문서가 승인되지 않은 경우 어떻게 해야 하나요?
컨텍스트 문서 상태가 'approved'가 아니라면 /design-blueprint를 먼저 실행해야 합니다. 다만, 결정 사항을 확인했다면 그대로 진행할 수도 있습니다.
구현 순서는 어떻게 결정되나요?
로드된 아키텍처 문서의 의존성 방향을 따라 가장 안쪽 레이어부터 시작하는 인사이드-아웃 구현 순서를 사용합니다.
구현 중 어떤 리뷰 모드를 사용할 수 있나요?
레이어별(layer-by-layer), 완전 자율(full autonomy), 또는 컴포넌트별(component-by-component) 리뷰 모드 중에서 선택할 수 있습니다.