my-vaults (ob-docs)
standalone ob-docs (https://vault.my-agentic-ai.click) vault를 API로 읽고 씁니다.
노트는 .md가 Source of Truth입니다. 임의 HTTP를 새로 짜지 말고 아래 스크립트를 실행하세요.
계정(USER_ID / email)마다 S3·디스크가 vault/{userId}/…로 분리됩니다.
스크립트가 보내는 userId의 vault만 보이며, 노트 경로는 항상 그 계정 vault 기준 상대경로입니다
(예: Meeting/Note.md — path에 email을 넣지 마세요).
When to Use
- vault / ob-docs / 내 노트 / 위키 노트 조회
- 노트 검색, 파일 트리, 백링크·그래프 확인
- 새 노트 작성, 기존 노트 수정·이어쓰기·이름변경·삭제
Script Location
application working directory 기준 전체 경로를 사용하세요.
| 스크립트 |
용도 |
skills/my-vaults/scripts/read_vault.py |
조회 (health / tree / list / read / search / graph / backlinks) |
skills/my-vaults/scripts/write_vault.py |
쓰기 (write / append / mkdir / rename / delete / rebuild) |
skills/my-vaults/scripts/lib_vault.py |
HTTP·인증 헬퍼 (직접 실행하지 않음) |
IMPORTANT: scripts/...로 줄이지 말고 위 전체 경로를 사용하세요.
Critical Rules
- 반드시 스크립트로 조회·수정하세요.
curl로 ad-hoc API를 새로 작성하지 마세요.
- 경로는 vault 상대경로입니다. 예:
AI/Ontology.md, Meeting/Weekly-Sync.md
- 덮어쓰기 전에
read로 현재 내용을 확인하세요. 부분 추가는 append를 우선 사용하세요.
- 출력은 JSON입니다. 사용자에게는 한국어로 요약하고, 본문이 길면 핵심만 인용하세요.
- 인증은 스크립트가
USER_ID/CURRENT_USER_ID와 vault-agent-token으로 처리합니다. 쿠키를 수동으로 만들지 마세요.
- 노트 본문 형식: YAML frontmatter(
--- … title/date/tags/aliases/status … ---)를 넣지 마세요. 새 노트·덮어쓰기는 상단을 # 제목 한 줄로 시작하고 바로 본문을 이어서 쓰세요.
- 새 노트는 vault 루트에 두지 마세요. 주제 폴더 아래(
Category/Note.md)에만 저장합니다. 아래 Folder Organization을 따르세요.
- 결과는 가능한 하나의 마크다운에 모으세요. 같은 주제·같은 작업의 산출물을 작은
.md 여러 개로 쪼개지 마세요. 섹션(##/###)으로 구조화하고, 분량이 많으면 제목 바로 아래에 목차(TOC) 를 넣으세요. 사용자가 파일 분리를 명시하거나 기존 노트에 이어 쓰는 경우만 예외입니다.
# Claude Tag
## 목차
- [개요](#개요)
- [세부](#세부)
## 개요
본문…
## 세부
본문…
Folder Organization
새 노트 작성 시 반드시 카테고리 폴더에 넣습니다. 루트에 Something.md를 만들지 마세요.
절차
tree 또는 list로 기존 폴더를 확인합니다.
- 노트 주제에 맞는 폴더가 이미 있으면 그 폴더를 재사용합니다. (대소문자·이름 변형이 비슷하면 기존 폴더 우선)
- 없으면
mkdir로 새 카테고리 폴더를 만든 뒤 그 안에 노트를 저장합니다.
- 경로 형식:
<Category>/<NoteTitle>.md (예: Meeting/Sprint-Review.md)
카테고리 예시
노트 내용에 맞게 선택·생성하세요. 대표 예시는 다음과 같습니다.
| 폴더 |
넣을 노트 |
Productivity |
할 일, 습관, GTD, 워크플로, 생산성 팁 |
AI |
모델, 프롬프트, LLM 개념, AI 도구 |
Agent |
에이전트·스킬·런타임·자동화 로그 |
Meeting |
회의록, 싱크, 액션 아이템 |
Project |
특정 프로젝트 메모·계획·로드맵 |
Research |
조사, 논문, 벤치마크, POC 결과 |
Personal |
개인 메모, 일기성 기록, 목표 |
Reference |
치트시트, 컨벤션, 재사용 참고 |
Architecture |
시스템 설계, 다이어그램, ADR, 의사결정 |
DevOps |
CI/CD, 인프라, 배포, 모니터링, IaC |
Cloud |
AWS/GCP/Azure 서비스, 계정·리전 메모 |
Security |
위협 모델, 권한·시크릿, 보안 체크리스트 |
Product |
요구사항, 유저 스토리, 우선순위, 스펙 |
Design |
UI/UX, 와이어프레임, 디자인 토큰 메모 |
Engineering |
구현 메모, 버그 분석, 리팩터링 기록 |
Learning |
공부 노트, 튜토리얼 정리, 강의 요약 |
Ideas |
아이디어 스케치, 가설, 브레인스토밍 |
Writing |
초안, 블로그·발표 원고, 문서 아웃라인 |
Finance |
예산, 비용, 청구·견적, 재무 메모 |
People |
1:1, 피드백, 팀·조직 관련 메모 |
Decision |
의사결정 로그, 트레이드오프, go/no-go |
Runbook |
운영 절차, 장애 대응, how-to |
Template |
재사용 템플릿(회의록·ADR·체크리스트 뼈대) |
Archive |
완료·폐기된 노트 (사용자가 아카이브 요청 시) |
위 목록에 없으면 짧은 PascalCase/영문 폴더명을 새로 만드세요 (예: Legal, Health, Travel). 한 노트에 주제가 겹치면 가장 구체적인 하나만 고릅니다.
금지 / 권장
- ❌
Draft.md, Note.md처럼 vault 루트에 직접 저장
- ❌ 매번
00-Inbox에만 쌓기 (사용자가 명시하지 않는 한)
- ❌ 같은 주제 결과를
Overview.md / Details.md / Summary.md처럼 작은 파일 여러 개로 쪼개기
- ✅ 기존
AI/가 있으면 AI/New-Topic.md
- ✅ 없으면
mkdir Meeting 후 Meeting/Standup-2026-03-17.md
- ✅ 긴 노트는 하나의
.md + ## 섹션 + (분량 많으면) 목차
Quick Start
# 연결 확인 (기본 URL: https://vault.my-agentic-ai.click)
python skills/my-vaults/scripts/read_vault.py health
# 노트 목록
python skills/my-vaults/scripts/read_vault.py list
python skills/my-vaults/scripts/read_vault.py list --prefix Productivity
# 트리 (새 노트 전 폴더 확인용)
python skills/my-vaults/scripts/read_vault.py tree
# 읽기
python skills/my-vaults/scripts/read_vault.py read Productivity/Convention.md
python skills/my-vaults/scripts/read_vault.py read Productivity/Convention.md --raw
# 검색
python skills/my-vaults/scripts/read_vault.py search "온톨로지"
# 그래프 / 백링크
python skills/my-vaults/scripts/read_vault.py graph
python skills/my-vaults/scripts/read_vault.py backlinks Productivity/Convention.md
쓰기 (본문은 항상 # 제목으로 시작 — frontmatter 금지. 루트 저장 금지):
# 새 노트 전: 기존 폴더 확인
python skills/my-vaults/scripts/read_vault.py tree
# 폴더가 없으면 생성 후 저장
python skills/my-vaults/scripts/write_vault.py mkdir Meeting
python skills/my-vaults/scripts/write_vault.py write Meeting/Sprint-Review.md --content "# Sprint Review\n\n본문"
# 기존 폴더가 있으면 그대로 사용
python skills/my-vaults/scripts/write_vault.py write AI/Prompt-Patterns.md --content "# Prompt Patterns\n\n본문"
# 로컬 파일 업로드
python skills/my-vaults/scripts/write_vault.py write Research/Report.md --file "$ARTIFACTS_DIR/report.md"
# 이어쓰기 (stdin)
printf '\n## Update\n- item\n' | python skills/my-vaults/scripts/write_vault.py append Agent/Runtime-Log.md --stdin
# 이동 / 삭제
python skills/my-vaults/scripts/write_vault.py rename Meeting/Draft.md Productivity/Draft.md
python skills/my-vaults/scripts/write_vault.py delete Meeting/Draft.md
Agent usage
import subprocess
READ = "skills/my-vaults/scripts/read_vault.py"
WRITE = "skills/my-vaults/scripts/write_vault.py"
# 새 노트 전 폴더 확인
r = subprocess.run(["python", READ, "tree"], capture_output=True, text=True)
print(r.stdout)
r = subprocess.run(["python", READ, "search", "온톨로지"], capture_output=True, text=True)
print(r.stdout)
# 카테고리 폴더 아래만 쓰기 (루트 금지)
r = subprocess.run(
["python", WRITE, "mkdir", "Agent"],
capture_output=True, text=True,
)
r = subprocess.run(
["python", WRITE, "append", "Agent/Runtime-Log.md", "--content", "- done\\n"],
capture_output=True, text=True,
)
print(r.stdout)
Subcommands
read_vault.py
| 명령 |
설명 |
health |
서비스 상태 |
session |
인증된 user_id 확인 |
tree |
폴더 트리 |
list [--prefix] [--ext md|\*] |
플랫 파일 목록 |
read <path> [--raw] |
노트 본문(+메타/백링크) |
search <query> [--limit N] |
전문/메타 검색 |
graph |
위키링크 그래프 |
backlinks <path> |
해당 노트를 가리키는 링크 |
write_vault.py
| 명령 |
설명 |
write <path> (--content|--file|--stdin) |
덮어쓰기 저장 |
append <path> (--content|--file|--stdin) |
이어쓰기 (--no-create로 신규 금지) |
mkdir <path> |
폴더 생성 |
rename <from> <to> |
이동/이름변경 |
delete <path> |
파일·폴더 삭제 |
rebuild |
검색/그래프 인덱스 재생성 |
공통 옵션: --user-id (기본은 환경변수 USER_ID / CURRENT_USER_ID)
API는 ob-docs 사이트 루트의 /api/... 입니다 (구 /vault/api/... 아님).
Environment
| 변수 |
기본 |
설명 |
OB_DOCS_URL / VAULT_API_URL |
https://vault.my-agentic-ai.click |
ob-docs base URL (agentic sharing_url/cowork 도메인 사용 금지) |
USER_ID / CURRENT_USER_ID |
local-dev |
세션 user id — 프로덕션에서는 로그인 email |
VAULT_AGENT_TOKEN |
Secrets Manager agent-skills/vault-agent-token 또는 ob-docs/vault-agent-token |
AgentCore용 HMAC (양쪽 시크릿 값이 같아야 함) |
OB_DOCS_VAULT_AGENT_SECRET |
(없음) |
토큰 시크릿 이름 강제 지정 |
SESSION_SIGNING_KEY |
(로컬/앱 ECS) |
웹 세션 키 — AgentCore에서는 IAM Deny |
로컬 ob-docs:
export OB_DOCS_URL=http://127.0.0.1:8502
export USER_ID='kyopark2014@gmail.com' # 계정별 vault
python skills/my-vaults/scripts/read_vault.py list
config.json에 ob_docs_url을 넣어도 됩니다.
Response tips
list/search 결과는 path 표로 정리하세요.
read는 title·tags·backlinks를 함께 보여준 뒤 본문 요약을 하세요.
- 쓰기 성공 시 path와
ok: true만 짧게 확인하면 됩니다.
- 새 노트 작성 시 frontmatter 없이
# 제목 + 본문만 저장하고, 카테고리 폴더 경로(AI/..., Meeting/... 등)를 사용자에게 알려 주세요.
- 사용자가 폴더를 지정하지 않아도 주제에 맞는 폴더를 고르거나 만들고, 기존 폴더가 있으면 재사용하세요.
- 조사·요약·리포트·회의록 등은 한 파일에 섹션으로 모으세요.
Part1.md / Part2.md처럼 잘게 나누지 마세요.
- 본문이 길면 (
## 섹션이 대략 4개 이상이거나 스크롤이 길 때) # 제목 다음에 ## 목차와 앵커 링크 목록을 넣으세요.
Troubleshooting
Vault auth unavailable / SESSION_SIGNING_KEY not found
AgentCore 런타임은 session-signing-key 읽기가 IAM Deny입니다.
agent-skills/vault-agent-token 또는 ob-docs/vault-agent-token + 런타임 정책 Allow가 필요합니다.
두 시크릿 문자열이 동일해야 ob-docs가 검증에 성공합니다.
Failed to reach ob-docs
OB_DOCS_URL이 https://vault.my-agentic-ai.click (또는 로컬 http://127.0.0.1:8502)인지 확인하세요.
agentic-work CloudFront(cowork…)로 치면 실패합니다.
HTTP 404 on /vault/api/...
구 경로입니다. 이 스킬은 /api/health, /api/files/tree 등 사이트 루트 API만 사용합니다. 스킬을 최신으로 동기화하세요.
HTTP 401 unauthorized
프로덕션: vault-agent-token이 ob-docs·AgentCore 양쪽에 있고 값이 같은지 확인하세요.
로컬: OB_DOCS_URL=http://127.0.0.1:8502 + ob-docs ALLOW_LOCAL_AUTH_BYPASS=1.
빈 tree / File not found
USER_ID가 실제 Google email인지 확인하세요. local-dev는 별도 빈 vault입니다.
노트는 vault/{email}/… 아래에만 있습니다.
1---2name: my-vaults3description: ob-docs(Obsidian형 vault)에 저장된 마크다운 노트를 조회·검색·생성·수정합니다. 사용자가 "vault", "내 노트", "ob-docs", "위키링크", "백링크", "노트 찾아줘", "메모 저장", "vault에 적어줘", "지식베이스" 등을 요청할 때 사용합니다.4---56# my-vaults (ob-docs)78standalone **ob-docs** (`https://vault.my-agentic-ai.click`) vault를 API로 읽고 씁니다. 9노트는 `.md`가 Source of Truth입니다. 임의 HTTP를 새로 짜지 말고 아래 스크립트를 실행하세요.1011계정(`USER_ID` / email)마다 S3·디스크가 `vault/{userId}/…`로 분리됩니다. 12스크립트가 보내는 userId의 vault만 보이며, 노트 경로는 항상 **그 계정 vault 기준 상대경로**입니다13(예: `Meeting/Note.md` — path에 email을 넣지 마세요).1415## When to Use1617- vault / ob-docs / 내 노트 / 위키 노트 조회18- 노트 검색, 파일 트리, 백링크·그래프 확인19- 새 노트 작성, 기존 노트 수정·이어쓰기·이름변경·삭제2021## Script Location2223application working directory 기준 전체 경로를 사용하세요.2425| 스크립트 | 용도 |26| --- | --- |27| `skills/my-vaults/scripts/read_vault.py` | 조회 (health / tree / list / read / search / graph / backlinks) |28| `skills/my-vaults/scripts/write_vault.py` | 쓰기 (write / append / mkdir / rename / delete / rebuild) |29| `skills/my-vaults/scripts/lib_vault.py` | HTTP·인증 헬퍼 (직접 실행하지 않음) |3031**IMPORTANT**: `scripts/...`로 줄이지 말고 위 전체 경로를 사용하세요.3233## Critical Rules34351. **반드시 스크립트로** 조회·수정하세요. `curl`로 ad-hoc API를 새로 작성하지 마세요.362. 경로는 vault 상대경로입니다. 예: `AI/Ontology.md`, `Meeting/Weekly-Sync.md`373. 덮어쓰기 전에 `read`로 현재 내용을 확인하세요. 부분 추가는 `append`를 우선 사용하세요.384. 출력은 JSON입니다. 사용자에게는 한국어로 요약하고, 본문이 길면 핵심만 인용하세요.395. 인증은 스크립트가 `USER_ID`/`CURRENT_USER_ID`와 vault-agent-token으로 처리합니다. 쿠키를 수동으로 만들지 마세요.406. **노트 본문 형식**: YAML frontmatter(`---` … `title`/`date`/`tags`/`aliases`/`status` … `---`)를 **넣지 마세요**. 새 노트·덮어쓰기는 상단을 `# 제목` 한 줄로 시작하고 바로 본문을 이어서 쓰세요.417. **새 노트는 vault 루트에 두지 마세요.** 주제 폴더 아래(`Category/Note.md`)에만 저장합니다. 아래 [Folder Organization](#folder-organization)을 따르세요.428. **결과는 가능한 하나의 마크다운에 모으세요.** 같은 주제·같은 작업의 산출물을 작은 `.md` 여러 개로 쪼개지 마세요. 섹션(`##`/`###`)으로 구조화하고, 분량이 많으면 제목 바로 아래에 **목차(TOC)** 를 넣으세요. 사용자가 파일 분리를 명시하거나 기존 노트에 이어 쓰는 경우만 예외입니다.4344```markdown45# Claude Tag4647## 목차48- [개요](#개요)49- [세부](#세부)5051## 개요5253본문…5455## 세부5657본문…58```59## Folder Organization6061새 노트 작성 시 **반드시** 카테고리 폴더에 넣습니다. 루트에 `Something.md`를 만들지 마세요.6263### 절차64651. `tree` 또는 `list`로 기존 폴더를 확인합니다.662. 노트 주제에 맞는 폴더가 **이미 있으면 그 폴더를 재사용**합니다. (대소문자·이름 변형이 비슷하면 기존 폴더 우선)673. 없으면 `mkdir`로 새 카테고리 폴더를 만든 뒤 그 안에 노트를 저장합니다.684. 경로 형식: `<Category>/<NoteTitle>.md` (예: `Meeting/Sprint-Review.md`)6970### 카테고리 예시7172노트 내용에 맞게 선택·생성하세요. 대표 예시는 다음과 같습니다.7374| 폴더 | 넣을 노트 |75| --- | --- |76| `Productivity` | 할 일, 습관, GTD, 워크플로, 생산성 팁 |77| `AI` | 모델, 프롬프트, LLM 개념, AI 도구 |78| `Agent` | 에이전트·스킬·런타임·자동화 로그 |79| `Meeting` | 회의록, 싱크, 액션 아이템 |80| `Project` | 특정 프로젝트 메모·계획·로드맵 |81| `Research` | 조사, 논문, 벤치마크, POC 결과 |82| `Personal` | 개인 메모, 일기성 기록, 목표 |83| `Reference` | 치트시트, 컨벤션, 재사용 참고 |84| `Architecture` | 시스템 설계, 다이어그램, ADR, 의사결정 |85| `DevOps` | CI/CD, 인프라, 배포, 모니터링, IaC |86| `Cloud` | AWS/GCP/Azure 서비스, 계정·리전 메모 |87| `Security` | 위협 모델, 권한·시크릿, 보안 체크리스트 |88| `Product` | 요구사항, 유저 스토리, 우선순위, 스펙 |89| `Design` | UI/UX, 와이어프레임, 디자인 토큰 메모 |90| `Engineering` | 구현 메모, 버그 분석, 리팩터링 기록 |91| `Learning` | 공부 노트, 튜토리얼 정리, 강의 요약 |92| `Ideas` | 아이디어 스케치, 가설, 브레인스토밍 |93| `Writing` | 초안, 블로그·발표 원고, 문서 아웃라인 |94| `Finance` | 예산, 비용, 청구·견적, 재무 메모 |95| `People` | 1:1, 피드백, 팀·조직 관련 메모 |96| `Decision` | 의사결정 로그, 트레이드오프, go/no-go |97| `Runbook` | 운영 절차, 장애 대응, how-to |98| `Template` | 재사용 템플릿(회의록·ADR·체크리스트 뼈대) |99| `Archive` | 완료·폐기된 노트 (사용자가 아카이브 요청 시) |100101위 목록에 없으면 짧은 PascalCase/영문 폴더명을 새로 만드세요 (예: `Legal`, `Health`, `Travel`). 한 노트에 주제가 겹치면 **가장 구체적인 하나**만 고릅니다.102103### 금지 / 권장104105- ❌ `Draft.md`, `Note.md`처럼 vault 루트에 직접 저장106- ❌ 매번 `00-Inbox`에만 쌓기 (사용자가 명시하지 않는 한)107- ❌ 같은 주제 결과를 `Overview.md` / `Details.md` / `Summary.md`처럼 작은 파일 여러 개로 쪼개기108- ✅ 기존 `AI/`가 있으면 `AI/New-Topic.md`109- ✅ 없으면 `mkdir Meeting` 후 `Meeting/Standup-2026-03-17.md`110- ✅ 긴 노트는 하나의 `.md` + `##` 섹션 + (분량 많으면) 목차111112## Quick Start113114```bash115# 연결 확인 (기본 URL: https://vault.my-agentic-ai.click)116python skills/my-vaults/scripts/read_vault.py health117118# 노트 목록119python skills/my-vaults/scripts/read_vault.py list120python skills/my-vaults/scripts/read_vault.py list --prefix Productivity121122# 트리 (새 노트 전 폴더 확인용)123python skills/my-vaults/scripts/read_vault.py tree124125# 읽기126python skills/my-vaults/scripts/read_vault.py read Productivity/Convention.md127python skills/my-vaults/scripts/read_vault.py read Productivity/Convention.md --raw128129# 검색130python skills/my-vaults/scripts/read_vault.py search "온톨로지"131132# 그래프 / 백링크133python skills/my-vaults/scripts/read_vault.py graph134python skills/my-vaults/scripts/read_vault.py backlinks Productivity/Convention.md135```136137쓰기 (본문은 항상 `# 제목`으로 시작 — frontmatter 금지. **루트 저장 금지**):138139```bash140# 새 노트 전: 기존 폴더 확인141python skills/my-vaults/scripts/read_vault.py tree142143# 폴더가 없으면 생성 후 저장144python skills/my-vaults/scripts/write_vault.py mkdir Meeting145python skills/my-vaults/scripts/write_vault.py write Meeting/Sprint-Review.md --content "# Sprint Review\n\n본문"146147# 기존 폴더가 있으면 그대로 사용148python skills/my-vaults/scripts/write_vault.py write AI/Prompt-Patterns.md --content "# Prompt Patterns\n\n본문"149150# 로컬 파일 업로드151python skills/my-vaults/scripts/write_vault.py write Research/Report.md --file "$ARTIFACTS_DIR/report.md"152153# 이어쓰기 (stdin)154printf '\n## Update\n- item\n' | python skills/my-vaults/scripts/write_vault.py append Agent/Runtime-Log.md --stdin155156# 이동 / 삭제157python skills/my-vaults/scripts/write_vault.py rename Meeting/Draft.md Productivity/Draft.md158python skills/my-vaults/scripts/write_vault.py delete Meeting/Draft.md159```160161### Agent usage162163```python164import subprocess165166READ = "skills/my-vaults/scripts/read_vault.py"167WRITE = "skills/my-vaults/scripts/write_vault.py"168169# 새 노트 전 폴더 확인170r = subprocess.run(["python", READ, "tree"], capture_output=True, text=True)171print(r.stdout)172173r = subprocess.run(["python", READ, "search", "온톨로지"], capture_output=True, text=True)174print(r.stdout)175176# 카테고리 폴더 아래만 쓰기 (루트 금지)177r = subprocess.run(178 ["python", WRITE, "mkdir", "Agent"],179 capture_output=True, text=True,180)181r = subprocess.run(182 ["python", WRITE, "append", "Agent/Runtime-Log.md", "--content", "- done\\n"],183 capture_output=True, text=True,184)185print(r.stdout)186```187188## Subcommands189190### `read_vault.py`191192| 명령 | 설명 |193| --- | --- |194| `health` | 서비스 상태 |195| `session` | 인증된 user_id 확인 |196| `tree` | 폴더 트리 |197| `list [--prefix] [--ext md\|\*]` | 플랫 파일 목록 |198| `read <path> [--raw]` | 노트 본문(+메타/백링크) |199| `search <query> [--limit N]` | 전문/메타 검색 |200| `graph` | 위키링크 그래프 |201| `backlinks <path>` | 해당 노트를 가리키는 링크 |202203### `write_vault.py`204205| 명령 | 설명 |206| --- | --- |207| `write <path> (--content\|--file\|--stdin)` | 덮어쓰기 저장 |208| `append <path> (--content\|--file\|--stdin)` | 이어쓰기 (`--no-create`로 신규 금지) |209| `mkdir <path>` | 폴더 생성 |210| `rename <from> <to>` | 이동/이름변경 |211| `delete <path>` | 파일·폴더 삭제 |212| `rebuild` | 검색/그래프 인덱스 재생성 |213214공통 옵션: `--user-id` (기본은 환경변수 `USER_ID` / `CURRENT_USER_ID`)215216API는 ob-docs 사이트 루트의 `/api/...` 입니다 (구 `/vault/api/...` 아님).217218## Environment219220| 변수 | 기본 | 설명 |221| --- | --- | --- |222| `OB_DOCS_URL` / `VAULT_API_URL` | `https://vault.my-agentic-ai.click` | ob-docs base URL (agentic `sharing_url`/cowork 도메인 사용 금지) |223| `USER_ID` / `CURRENT_USER_ID` | `local-dev` | 세션 user id — **프로덕션에서는 로그인 email** |224| `VAULT_AGENT_TOKEN` | Secrets Manager `agent-skills/vault-agent-token` 또는 `ob-docs/vault-agent-token` | AgentCore용 HMAC (양쪽 시크릿 값이 같아야 함) |225| `OB_DOCS_VAULT_AGENT_SECRET` | (없음) | 토큰 시크릿 이름 강제 지정 |226| `SESSION_SIGNING_KEY` | (로컬/앱 ECS) | 웹 세션 키 — AgentCore에서는 IAM Deny |227228로컬 ob-docs:229230```bash231export OB_DOCS_URL=http://127.0.0.1:8502232export USER_ID='kyopark2014@gmail.com' # 계정별 vault233python skills/my-vaults/scripts/read_vault.py list234```235236config.json에 `ob_docs_url`을 넣어도 됩니다.237238## Response tips239240- `list`/`search` 결과는 path 표로 정리하세요.241- `read`는 title·tags·backlinks를 함께 보여준 뒤 본문 요약을 하세요.242- 쓰기 성공 시 path와 `ok: true`만 짧게 확인하면 됩니다.243- 새 노트 작성 시 frontmatter 없이 `# 제목` + 본문만 저장하고, **카테고리 폴더 경로**(`AI/...`, `Meeting/...` 등)를 사용자에게 알려 주세요.244- 사용자가 폴더를 지정하지 않아도 주제에 맞는 폴더를 고르거나 만들고, 기존 폴더가 있으면 재사용하세요.245- 조사·요약·리포트·회의록 등은 **한 파일**에 섹션으로 모으세요. `Part1.md` / `Part2.md`처럼 잘게 나누지 마세요.246- 본문이 길면 (`##` 섹션이 대략 4개 이상이거나 스크롤이 길 때) `# 제목` 다음에 `## 목차`와 앵커 링크 목록을 넣으세요.247248## Troubleshooting249250### `Vault auth unavailable` / `SESSION_SIGNING_KEY not found`251252AgentCore 런타임은 `session-signing-key` 읽기가 **IAM Deny**입니다. 253`agent-skills/vault-agent-token` 또는 `ob-docs/vault-agent-token` + 런타임 정책 Allow가 필요합니다. 254두 시크릿 **문자열이 동일**해야 ob-docs가 검증에 성공합니다.255256### `Failed to reach ob-docs`257258`OB_DOCS_URL`이 `https://vault.my-agentic-ai.click` (또는 로컬 `http://127.0.0.1:8502`)인지 확인하세요. 259agentic-work CloudFront(`cowork…`)로 치면 실패합니다.260261### `HTTP 404` on `/vault/api/...`262263구 경로입니다. 이 스킬은 `/api/health`, `/api/files/tree` 등 **사이트 루트 API**만 사용합니다. 스킬을 최신으로 동기화하세요.264265### `HTTP 401 unauthorized`266267프로덕션: vault-agent-token이 ob-docs·AgentCore 양쪽에 있고 값이 같은지 확인하세요. 268로컬: `OB_DOCS_URL=http://127.0.0.1:8502` + ob-docs `ALLOW_LOCAL_AUTH_BYPASS=1`.269270### 빈 tree / `File not found`271272`USER_ID`가 실제 Google email인지 확인하세요. `local-dev`는 별도 빈 vault입니다. 273노트는 `vault/{email}/…` 아래에만 있습니다.