Skip to content

manifest.yml 작성

✅ 라이브 (서버)

vault_* / sync_* 도구는 api.ainote.dev 서버에서 동작합니다 — JSON-RPC POST /api/mcp 또는 @ainote/sdk (ai.vault.* / ai.sync.*)로 호출하세요. (일부 vault 도구는 연결된 git-backed vault가 필요. 참고: @ainote/mcp npm 패키지 구버전엔 번들이 안 됐을 수 있으니 직접 JSON-RPC 또는 SDK 사용 권장.)

각 디바이스의 sync 매핑 정책. 로컬 파일 ↔ ainote path 명시적 정의.

위치

~/.claude/ainote-sync/manifest.yml

같은 디렉토리에 device.id (UUID) + state.json (last-known sync 상태).

최소 예시

yaml
device_id: macmini-2026-04-A1B2
hub:
  api: https://api.ainote.dev/api/mcp
  auth_env: AINOTE_API_KEY

sync:
  - source: ~/CLAUDE.md
    target: global/CLAUDE.md

전체 예시

yaml
device_id: macmini-2026-04-A1B2
hub:
  api: https://api.ainote.dev/api/mcp
  auth_env: AINOTE_API_KEY

sync:
  # 글로벌 메모리 — glob (모든 .md)
  - source: ~/.claude/projects/-Users-seunghan/memory/
    pattern: "*.md"
    target: global/memory/{basename}
    type: glob

  # 1:1 명시
  - source: ~/CLAUDE.md
    target: global/CLAUDE.md
  - source: ~/.claude/PERSONAS.md
    target: global/PERSONAS.md

  # 디렉토리 통째 (재귀)
  - source: ~/.claude/skills/seunghan-32inch-ppt/
    pattern: "**/*"
    target: global/skills/seunghan-32inch-ppt/{relpath}
    type: glob_recursive

  # 프로젝트별 메모리 (모든 프로젝트)
  - source: ~/.claude/projects/{project}/memory/
    pattern: "*.md"
    target: "{project_name}/{basename}"
    type: glob_per_project

  # 프로젝트 root CLAUDE.md (화이트리스트)
  - source: ~/launchcrew/CLAUDE.md
    target: launchcrew/CLAUDE.md
  - source: ~/tennis_bracket/CLAUDE.md
    target: tennis-bracket/CLAUDE.md           # snake → kebab

# 명시적 제외
skip:
  - ~/.claude/COMMANDS.md
  - ~/.claude/FLAGS.md
  - ~/.claude/RULES.md
  - ~/.claude/MCP.md

# 원격에 있지만 더 이상 받지 않을 (deprecated)
deprecated_remote:
  - krx_listing_backups/
  - krx_listing/                              # snake (kebab 으로 마이그)

safety:
  max_delete_pct: 10
  max_overwrite_files: 5
  dry_run_default: false

sync 항목 형식

단순 1:1

yaml
- source: ~/file.md
  target: ainote/path.md

Glob (디렉토리 + 패턴)

yaml
- source: ~/dir/
  pattern: "*.md"
  target: dest/{basename}
  type: glob

placeholder:

  • {basename} — 파일명만 (MEMORY.md)
  • {filename} — 확장자 제외 (MEMORY)
  • {relpath} — source 기준 상대경로

재귀 Glob

yaml
- source: ~/.claude/skills/my-skill/
  pattern: "**/*"
  target: skills/my-skill/{relpath}
  type: glob_recursive

프로젝트별 (특수)

yaml
- source: ~/.claude/projects/{project}/memory/
  pattern: "*.md"
  target: "{project_name}/{basename}"
  type: glob_per_project

{project} 는 디렉토리 이름, {project_name} 은 변환 (snake→kebab, prefix 제거 등).

변환 규칙 (선택)

yaml
- source: ~/{project}/CLAUDE.md
  target: "{project_kebab}/CLAUDE.md"
  transform:
    project_kebab:
      from: project
      replace:
        "_": "-"

검증

manifest 변경 후:

bash
ainote sync_validate

체크:

  • YAML 문법
  • source 경로 존재
  • target 충돌 (같은 target 에 두 source)
  • circular reference

다른 디바이스의 manifest

각 디바이스가 독립적 manifest. 한 hub 에 여러 manifest 가능 → spoke 마다 다른 sync 범위.

예:

  • 맥미니: 모든 프로젝트 sync
  • iPad: 메모리만 (project CLAUDE.md 제외)
  • linux desktop: vault 만

다음