Neul 개발 문서

Claude Code로 개발하기

Claude Code 기능 개요·메모리·.claude 디렉토리(CLAUDE.md/AGENTS.md/imports/auto-memory/settings/hooks)를 Neul 저장소 기준으로 정리한 온보딩 가이드

이 저장소는 Claude Code 로 개발하는 것을 1급 워크플로우로 삼습니다. 이 페이지는 Claude Code 공식 문서의 기능 개요·메모리·.claude 디렉토리 세 글을 요약하고, Neul 저장소가 실제로 그 기능들을 어떻게 쓰는지를 함께 설명합니다.

출처: Claude Code 확장하기(features-overview), Claude가 프로젝트를 기억하는 방법(memory), .claude 디렉토리 탐색(claude-directory).

공식 문서는 일반론입니다. 이 페이지의 "Neul 에서는" 블록이 이 저장소에 맞춘 실제 적용입니다. 새로 합류했다면 이 부분만 읽어도 바로 작업을 시작할 수 있습니다.

핵심 개념: 내장 도구 + 확장 계층

Claude Code 는 코드를 추론하는 모델에 내장 도구(파일 읽기/쓰기, 검색, 실행, 웹 접근)를 결합합니다. 내장 도구가 대부분의 코딩 작업을 처리하고, 그 위에 확장 계층을 얹어 "Claude 가 알아야 할 것"을 커스터마이즈하거나 외부 서비스에 연결하거나 워크플로우를 자동화합니다.

기능 개요 (features-overview 요약)

확장은 에이전트 루프의 서로 다른 지점에 연결됩니다.

기능하는 일언제 쓰나컨텍스트 비용
CLAUDE.md모든 세션에 로드되는 지속 컨텍스트프로젝트 규칙, "항상 X" 규칙매 요청(전체 로드)
Skills재사용 지식 + 호출 가능한 워크플로우(/name)참조 문서, 반복 작업낮음(설명만 상시, 본문은 사용 시)
Subagents격리된 컨텍스트에서 실행 후 요약만 반환많은 파일 읽기, 병렬·특화 작업주 세션과 격리
Agent teams여러 독립 세션이 서로 메시징하며 협업경쟁 가설 디버깅, 병렬 기능 개발높음(세션마다 별도 인스턴스)
Code intelligence(LSP)기호 네비게이션 + 실시간 타입 오류타입 언어, grep 이 느린 대규모 코드낮음(파일 통독 대체)
MCP외부 서비스/도구 연결DB 쿼리, Slack 게시, 브라우저 제어도구 이름만 상시, 스키마는 사용 시
Hooks라이프사이클 이벤트에서 스크립트/요청 실행"매번 자동으로" 실행할 작업0(출력 반환 시에만 발생)
Plugins위 기능들을 묶어 배포하는 패키징 계층여러 저장소에서 동일 설정 재사용번들 구성에 따름

유사 기능 구별 (요약)

  • Skill vs Subagent: skill 은 어느 컨텍스트로든 로드되는 재사용 콘텐츠, subagent 는 주 대화와 분리되어 도는 격리 워커(요약만 반환). 컨텍스트 격리가 필요하거나 윈도우가 찰 때 subagent.
  • CLAUDE.md vs Skill: 항상 알아야 할 규칙 → CLAUDE.md. 가끔 필요한 참조/워크플로우 → skill. 경험칙: CLAUDE.md 는 200줄 이하로 유지.
  • CLAUDE.md vs Rules vs Skill: .claude/rules/paths frontmatter 로 특정 파일에만 로드되어 컨텍스트를 절약.
  • Subagent vs Agent team: subagent 는 주 에이전트에 보고, agent team 은 팀원끼리 직접 메시징하며 자체 조정(토큰 비용 높음).
  • MCP vs Skill: MCP 는 "연결(능력)", skill 은 "그 도구를 잘 쓰는 법(지식)". 함께 쓰면 강력.
  • Hook vs Skill: hook 은 이벤트에서 결정론적으로 항상 실행, skill 은 Claude 가 해석해 적용. 가드레일은 hook 으로(프롬프트 지침은 요청일 뿐 강제가 아님).

시간이 지남에 따라 설정 쌓기

미리 다 만들 필요 없습니다. 트리거가 보이면 추가합니다.

트리거추가
Claude 가 같은 규칙/명령을 두 번 틀림CLAUDE.md 에 한 줄 추가
같은 프롬프트를 계속 입력사용자 호출 skill(/name)로 저장
같은 플레이북을 세 번째로 붙여넣음skill 로 캡처
안 보이는 시스템의 데이터를 계속 복사MCP 서버로 연결
정의/사용처 찾으려 파일을 많이 읽음code intelligence(LSP) 플러그인 설치
부수효과 출력이 대화를 채움subagent 로 라우팅
요청 없이도 매번 실행되길 원함hook 작성
두 번째 저장소가 같은 설정 필요plugin 으로 패키징

메모리 (memory 요약)

Claude Code 세션은 매번 새 컨텍스트로 시작합니다. 세션 간 지식 전달은 두 가지로 합니다.

CLAUDE.md 파일자동 메모리(auto-memory)
작성자사람Claude
내용지침·규칙학습·패턴
범위프로젝트/사용자/조직저장소당(워크트리 공유)
로드모든 세션모든 세션(MEMORY.md 앞 200줄 또는 25KB)

CLAUDE.md 계층

가장 넓은 범위부터 좁은 범위 순으로 로드되며 서로를 덮어쓰지 않고 누적됩니다(더 구체적인 지침이 보통 우선).

범위위치공유 대상
관리 정책OS 별 시스템 경로조직 전체(개별 제외 불가)
사용자~/.claude/CLAUDE.md본인(모든 프로젝트)
프로젝트./CLAUDE.md 또는 ./.claude/CLAUDE.md소스 컨트롤로 팀 공유
로컬./CLAUDE.local.md(.gitignore)본인(현재 프로젝트)

작업 디렉토리 위쪽의 CLAUDE.md 는 시작 시 전부 로드되고, 하위 디렉토리의 파일은 그 디렉토리의 파일을 만질 때 로드됩니다.

@path import

CLAUDE.md 는 @경로 구문으로 다른 파일을 가져옵니다. 가져온 파일은 펼쳐져 시작 컨텍스트에 함께 로드되며, 최대 4 홉까지 재귀 import 됩니다. 상대 경로는 작업 디렉토리가 아니라 import 를 포함한 파일 기준입니다.

AGENTS.md 와의 관계 — Neul 의 핵심 패턴

Neul 에서는

Claude Code 는 AGENTS.md직접 읽지 않고 CLAUDE.md 를 읽습니다. 그래서 이 저장소의 루트 CLAUDE.md 는 단 한 줄, 다음으로 되어 있습니다:

CLAUDE.md
@AGENTS.md

모든 아키텍처/규칙의 원본은 AGENTS.md 이고, Claude Code 는 @AGENTS.md import 를 통해 그 내용을 시작 시 로드합니다. 다른 코딩 에이전트(AGENTS.md 규약을 쓰는 도구)와 중복 없이 동일한 지침을 공유하기 위한 구성입니다. Claude 전용 지침이 필요하면 @AGENTS.md 아래에 덧붙이면 됩니다.

AGENTS.md 에는 이 저장소의 v5 아키텍처, 핵심 결정/주의(자체 인증, AI 라우터, Workers DB 요청별 생성, day-key UTC, 모바일 네트워킹), 로컬 실행 명령, 작업 규칙, 그리고 테스트 정책이 정리되어 있습니다. 이 문서 사이트의 다른 페이지들도 AGENTS.md 를 원본으로 삼아 작성되었습니다.

자동 메모리 (auto-memory)

Claude 는 작업하며 빌드 명령·디버깅 인사이트·선호도 등을 스스로 노트로 남깁니다. 저장 위치는 저장소별로:

~/.claude/projects/<project>/memory/
├─ MEMORY.md   # 간결한 인덱스 (모든 세션에 앞 200줄/25KB 로드)
└─ *.md        # 주제별 상세 노트 (필요할 때만 읽음)

<project> 경로는 git 저장소에서 파생되므로 같은 저장소의 모든 워크트리·하위 디렉토리가 하나의 메모리 디렉토리를 공유합니다(머신 로컬, 클라우드 미공유). /memory 명령으로 로드된 CLAUDE.md/규칙 파일을 확인하고 자동 메모리를 켜고 끌 수 있습니다.

Neul 에서는

이 저장소에는 이미 자동 메모리 인덱스가 쌓여 있습니다(예: "인증은 Supabase 가 아니라 자체 JWT", "v5 스택 버전별 주의", "보고된 버그는 항상 회귀 테스트로", "배포 맵/ wrangler 함정"). 새 세션에서 Claude 가 이를 자동으로 참고하므로, 같은 맥락을 매번 다시 설명할 필요가 줄어듭니다. 잘못 기억된 내용이 보이면 /memory 로 열어 직접 편집/삭제하세요.

또한 같은 학습을 벤더 중립(도구 무관)으로 커밋해 둔 .agents/memory/ 가 있습니다 — Claude 의 머신 로컬 auto-memory 와 달리 저장소에 들어가 어떤 에이전트든 읽습니다. .agents/memory/MEMORY.md 가 인덱스이며 AGENTS.md 의 "메모리" 섹션이 여기를 가리킵니다.

.claude 디렉토리 구조 (claude-directory 요약)

Claude Code 는 두 곳의 .claude 디렉토리를 읽습니다 — 프로젝트의 ./.claude/(팀과 공유, 커밋) 와 홈의 ~/.claude/(개인 전역, 머신 로컬). 같은 종류의 파일이 두 곳에 있을 수 있고, 보통 사용자(전역) → 프로젝트 순으로 로드돼 더 구체적인 프로젝트 설정이 뒤에 옵니다.

프로젝트 ./.claude/ (커밋 — 팀 공유)

항목역할비고
CLAUDE.md모든 세션 로드되는 프로젝트 지침루트 ./CLAUDE.md 도 동일
settings.json권한·hooks·구성커밋(팀 공유)
settings.local.json개인 오버라이드gitignore
rules/주제별 지침(paths frontmatter 로 특정 파일에만 로드)컨텍스트 절약
skills/<name>/SKILL.md/name 으로 부르는 재사용 워크플로우(+부속 파일 번들)commands 의 상위호환
commands/*.md단일 파일 슬래시 명령skills 로 대체 권장
agents/*.md격리 컨텍스트 subagent 정의코드리뷰어 등
workflows/여러 subagent 를 오케스트레이션하는 동적 워크플로우 스크립트
agent-memory/<agent>/MEMORY.mdsubagent 영속 메모리(메인 세션 auto-memory 와 분리)
(루트) .mcp.json프로젝트 범위 MCP 서버커밋

~/.claude/ (머신 로컬 — 모든 프로젝트)

CLAUDE.md(개인 전역 선호), settings.json(전역 기본 설정), keybindings.json, themes/, rules/·skills/·commands/·agents/·workflows/(전역판), output-styles/(시스템 프롬프트 변형), 그리고 자동 메모리가 사는 projects/<project>/memory/. .claude.json 은 앱 상태/UI 선호도.

Neul 에서는

이 저장소의 ./.claude/ 에는 커밋된 파일들이 있습니다:

.claude/
├─ settings.json               # Stop 훅 등록 (committed)
└─ hooks/
   ├─ enforce-tests.mjs        # 테스트 강제 Stop 훅
   └─ enforce-artifacts.mjs    # Storybook/docs 동기화 강제 Stop 훅
# .claude/settings.local.json 은 .gitignore (개인 오버라이드)

Stop 훅이 작업 마무리 시점에 산출물 동기화를 강제합니다(모두 fail-open):

  • enforce-tests.mjs — 구현 파일(.ts/.tsx)을 고치면서 회귀 테스트를 같은 변경에 안 넣으면 정지(테스트 정책). 우회 [skip-tests].
  • enforce-artifacts.mjs — UI 컴포넌트(apps/web/src/components/**.tsx)를 고치면서 스토리(*.stories.tsx)를 안 갱신하면 정지(우회 [skip-storybook]); 문서 원본 표면(AGENTS.md·wrangler·DEPLOY.md·deploy 워크플로우)을 고치면서 apps/docs/content 를 안 갱신하면 정지(우회 [skip-docs]).

.claude/ 는 eslint 에서 제외돼 있어 훅 스크립트(Node) 가 lint 를 깨지 않습니다.

Neul 에서 Claude Code 쓰기 — 실전 체크리스트

SDK/프레임워크 코드를 쓰기 전, 항상 node_modules 의 실제 .d.ts/README 를 확인하세요. 이 저장소의 패키지(hono, drizzle-orm, @cloudflare/vite-plugin, jose, fetch-event-source, fumadocs 등)는 학습 데이터보다 새로울 수 있습니다. 이 문서 사이트도 설치된 fumadocs 16.x 타입을 확인하고 작성했습니다.

  • 규칙의 원본은 AGENTS.md. 반복되는 실수나 새 결정은 채팅 일회성 수정이 아니라 AGENTS.md 편집으로 남깁니다(루트 CLAUDE.md@AGENTS.md 로 가져옵니다).
  • 새 API 라우트는 메서드 체이닝으로. 그래야 Hono RPC 타입이 web 으로 추론됩니다.
  • 워크스페이스 경계를 지키세요. .ts/.tsx 변경은 해당 워크스페이스 안에서. 백엔드 응답 shape 은 프론트 화면 호환을 위해 보존합니다.
  • 테스트는 정책입니다. 버그를 고치면 회귀 테스트를 같은 커밋에 포함합니다(unit / integration TZ=UTC / e2e 중 버그 성격에 맞는 레벨 — 테스트 참고).
  • DB/네이티브 명령은 신중히. pnpm db:* 는 로컬 Postgres 상태를 바꾸고, cap 명령은 네이티브 프로젝트를 건드립니다. 실행 전 영향을 확인하세요.
  • 컨텍스트 비용을 의식하세요. 항상 필요한 규칙만 AGENTS.md/CLAUDE.md 에, 가끔 필요한 참조는 skill 로, "매번 자동" 보장이 필요하면 hook 으로.

더 보기

  • 기능별 상세: features-overview
  • 메모리 상세(계층·import·auto-memory·문제 해결): memory
  • .claude 디렉토리 전체 구성: claude-directory
  • 이 저장소 규칙 원본: 루트 AGENTS.md

On this page