diff --git a/.obsidian/app.json b/.obsidian/app.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/.obsidian/app.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/.obsidian/appearance.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json new file mode 100644 index 00000000..639b90da --- /dev/null +++ b/.obsidian/core-plugins.json @@ -0,0 +1,33 @@ +{ + "file-explorer": true, + "global-search": true, + "switcher": true, + "graph": true, + "backlink": true, + "canvas": true, + "outgoing-link": true, + "tag-pane": true, + "footnotes": false, + "properties": true, + "page-preview": true, + "daily-notes": true, + "templates": true, + "note-composer": true, + "command-palette": true, + "slash-command": false, + "editor-status": true, + "bookmarks": true, + "markdown-importer": false, + "zk-prefixer": false, + "random-note": false, + "outline": true, + "word-count": true, + "slides": false, + "audio-recorder": false, + "workspaces": false, + "file-recovery": true, + "publish": false, + "sync": true, + "bases": true, + "webviewer": false +} \ No newline at end of file diff --git a/.obsidian/graph.json b/.obsidian/graph.json new file mode 100644 index 00000000..42a46eca --- /dev/null +++ b/.obsidian/graph.json @@ -0,0 +1,22 @@ +{ + "collapse-filter": true, + "search": "", + "showTags": false, + "showAttachments": false, + "hideUnresolved": false, + "showOrphans": true, + "collapse-color-groups": true, + "colorGroups": [], + "collapse-display": true, + "showArrow": false, + "textFadeMultiplier": 0, + "nodeSizeMultiplier": 1, + "lineSizeMultiplier": 1, + "collapse-forces": true, + "centerStrength": 0.518713248970312, + "repelStrength": 10, + "linkStrength": 1, + "linkDistance": 250, + "scale": 1, + "close": true +} \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json new file mode 100644 index 00000000..67d23a2a --- /dev/null +++ b/.obsidian/workspace.json @@ -0,0 +1,206 @@ +{ + "main": { + "id": "b33042e1dae2ebee", + "type": "split", + "children": [ + { + "id": "d6adc6f6ab929fb8", + "type": "tabs", + "children": [ + { + "id": "11878edbbb5f0b0a", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "환영합니다!.md", + "mode": "source", + "source": false + }, + "icon": "lucide-file", + "title": "환영합니다!" + } + } + ] + }, + { + "id": "9a59b699c2664d6e", + "type": "tabs", + "children": [ + { + "id": "1e6a9de3e7a2f91f", + "type": "leaf", + "state": { + "type": "graph", + "state": {}, + "icon": "lucide-git-fork", + "title": "그래프 뷰" + } + } + ] + } + ], + "direction": "vertical" + }, + "left": { + "id": "9345f240ecf9718f", + "type": "split", + "children": [ + { + "id": "91216e15c89884c5", + "type": "tabs", + "children": [ + { + "id": "a334448a82082dfb", + "type": "leaf", + "state": { + "type": "file-explorer", + "state": { + "sortOrder": "alphabetical", + "autoReveal": false + }, + "icon": "lucide-folder-closed", + "title": "파일 탐색기" + } + }, + { + "id": "3fde83500b942e71", + "type": "leaf", + "state": { + "type": "search", + "state": { + "query": "", + "matchingCase": false, + "explainSearch": false, + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical" + }, + "icon": "lucide-search", + "title": "검색" + } + }, + { + "id": "37b12a15d0fa6468", + "type": "leaf", + "state": { + "type": "bookmarks", + "state": {}, + "icon": "lucide-bookmark", + "title": "북마크" + } + } + ] + } + ], + "direction": "horizontal", + "width": 300 + }, + "right": { + "id": "b319432f1125be96", + "type": "split", + "children": [ + { + "id": "400f9cd61e8ce9b1", + "type": "tabs", + "children": [ + { + "id": "bde996f9da69c71a", + "type": "leaf", + "state": { + "type": "backlink", + "state": { + "file": "환영합니다!.md", + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical", + "showSearch": false, + "searchQuery": "", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-coming-in", + "title": "환영합니다! 의 백링크" + } + }, + { + "id": "db2dbfd8d9544d44", + "type": "leaf", + "state": { + "type": "outgoing-link", + "state": { + "file": "환영합니다!.md", + "linksCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-going-out", + "title": "환영합니다! 의 나가는 링크" + } + }, + { + "id": "364cc9b1930534f7", + "type": "leaf", + "state": { + "type": "tag", + "state": { + "sortOrder": "frequency", + "useHierarchy": true, + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-tags", + "title": "태그" + } + }, + { + "id": "7e1c14ddf85167c6", + "type": "leaf", + "state": { + "type": "all-properties", + "state": { + "sortOrder": "frequency", + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-archive", + "title": "모든 속성" + } + }, + { + "id": "ba5f9cca95ba7d37", + "type": "leaf", + "state": { + "type": "outline", + "state": { + "file": "환영합니다!.md", + "followCursor": false, + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-list", + "title": "환영합니다! 의 개요" + } + } + ] + } + ], + "direction": "horizontal", + "width": 300, + "collapsed": true + }, + "left-ribbon": { + "hiddenItems": { + "switcher:빠른 전환기 열기": false, + "graph:그래프 뷰 열기": false, + "canvas:새 캔버스 만들기": false, + "daily-notes:오늘의 일일 노트 열기": false, + "templates:템플릿 삽입": false, + "command-palette:명령어 팔레트 열기": false, + "bases:새 베이스 생성하기": false + } + }, + "active": "11878edbbb5f0b0a", + "lastOpenFiles": [ + "환영합니다!.md" + ] +} \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md deleted file mode 100644 index 09a5bc81..00000000 --- a/AGENTS.md +++ /dev/null @@ -1,135 +0,0 @@ -# Obsidian Wiki — Agent Context - -A **skill-based framework** for building and maintaining an Obsidian knowledge base. No scripts or dependencies — everything is markdown instructions that you execute directly. - -## Configuration - -Resolve config using the Config Resolution Protocol in `.agents/skills/llm-wiki/SKILL.md`: - -1. **Walk up from CWD** — look for a `.env` file in the current directory, then each parent, up to `$HOME`. Stop at the first `.env` that contains `OBSIDIAN_VAULT_PATH`. -2. **Global config** — if no local `.env` is found, read `~/.obsidian-wiki/config`. -3. **Prompt setup** — if neither exists, tell the user to run `wiki-setup`. - -The resolved config sets `OBSIDIAN_VAULT_PATH` (where the wiki lives). It may also set `OBSIDIAN_WIKI_REPO` (where this repo is cloned) and other optional variables. - -**After reading config, always read `$OBSIDIAN_VAULT_PATH/AGENTS.md` if it exists.** It contains owner-specific conventions (domain vocabulary, ingest preferences, writing style, project scoping) that override framework defaults for all skills. Apply it for the duration of the session. - -## Vault Structure - -``` -$OBSIDIAN_VAULT_PATH/ -├── .agents/ -│ └── skills # Skills for building obsidian-wiki -├── index.md # Master index — every page listed, always kept current -├── log.md # Chronological activity log (ingests, updates, lints) -├── hot.md # Session hot cache — ~500-word semantic snapshot of recent activity -├── .manifest.json # Tracks every ingested source: path, timestamps, pages produced -├── _meta/ -│ ├── taxonomy.md # Controlled tag vocabulary -│ └── *.base # Obsidian Bases dashboard definitions (wiki-dashboard skill) -├── _insights.md # Graph analysis output (hubs, bridges, dead ends) -├── _raw/ # Staging area — drop rough notes here, next ingest promotes them -├── concepts/ # Abstract ideas, patterns, mental models -├── entities/ # Concrete things — people, tools, libraries, companies -├── skills/ # How-to knowledge, techniques, procedures -├── references/ # Factual lookups — specs, APIs, configs -├── synthesis/ # Cross-cutting analysis connecting multiple concepts -├── journal/ # Time-bound entries — daily logs, session notes -└── projects/ - └── .md # One page per project synced via wiki-update -``` - -Every wiki page has required frontmatter: `title`, `category`, `tags`, `sources`, `created`, `updated`. Pages connect via internal links — `[[wikilinks]]` by default, or standard Markdown links when `OBSIDIAN_LINK_FORMAT=markdown` is set in config. - -## Skill Routing - -Skills live in `.agents/skills//SKILL.md`. Match the user's intent to the right skill: - -| User says something like… | Skill | -|---|---| -| "set up my wiki" / "initialize" | `wiki-setup` | -| "/wiki-history-ingest claude" / "/wiki-history-ingest codex" / "/wiki-history-ingest hermes" / "/wiki-history-ingest pi" | `wiki-history-ingest` | -| "/ingest-url " / "add this URL" / "ingest this link" / "save this page" | `ingest-url` | -| "ingest" / "add this to the wiki" / "process these docs" | `wiki-ingest` | -| "import my Claude history" / "mine my conversations" | `claude-history-ingest` | -| "import my Codex history" / "mine my Codex sessions" | `codex-history-ingest` | -| "import my Hermes history" / "mine my Hermes memories" / "ingest ~/.hermes" | `hermes-history-ingest` | -| "import my OpenClaw history" / "mine my OpenClaw sessions" / "ingest ~/.openclaw" | `openclaw-history-ingest` | -| "import my Copilot history" / "mine my Copilot sessions" / "ingest ~/.copilot" | `copilot-history-ingest` | -| "import my Pi history" / "mine my Pi sessions" / "ingest ~/.pi" | `pi-history-ingest` | -| "process this export" / "ingest this data" / logs, transcripts | `data-ingest` | -| "ingest this obsidian wiki" / "ingest the obsidian-wiki project" | `obsidian-wiki-ingest` | -| "what's the status" / "what's been ingested" / "show the delta" | `wiki-status` | -| "wiki insights" / "hubs" / "wiki structure" | `wiki-status` (insights mode) | -| "what do I know about X" / "find info on Y" / any question | `wiki-query` | -| "audit" / "lint" / "find broken links" / "wiki health" | `wiki-lint` | -| "dedup my wiki" / "find duplicate pages" / "merge duplicates" / "identity resolution" / "consolidate my wiki" | `wiki-dedup` | -| "rebuild" / "start over" / "archive" / "restore" | `wiki-rebuild` | -| "link my pages" / "cross-reference" / "connect my wiki" | `cross-linker` | -| "fix my tags" / "normalize tags" / "tag audit" | `tag-taxonomy` | -| "update wiki" / "sync to wiki" / "save this to my wiki" | `wiki-update` | -| "export wiki" / "export graph" / "graphml" / "neo4j" | `wiki-export` | -| "color my graph" / "color code obsidian" / "color by tag/category/visibility" | `graph-colorize` | -| "save this" / "/wiki-capture" / "capture this" / "file this conversation" | `wiki-capture` | -| "/wiki-quick-chat-capture" / "quick capture" / "capture this finding" / "save this gotcha" / "drop to raw" | `wiki-quick-chat-capture` | -| "/wiki-research [topic]" / "research X" / "find everything about Y" | `wiki-research` | -| "create a dashboard" / "vault dashboard" / "show all X as a table" / "dynamic view" | `wiki-dashboard` | -| "synthesize my wiki" / "find connections" / "what concepts keep coming up together" / "/wiki-synthesize" | `wiki-synthesize` | -| "create a new skill" | `skill-creator` | -| "/wiki-claude [topic]" / "/wiki-codex [topic]" / "/wiki-hermes [topic]" / "/wiki-openclaw [topic]" / "/wiki-copilot [topic]" / "/wiki-pi [topic]" | `wiki-agent` | -| "/memory-bridge" / "browse codex memory" / "what did codex know about X" / "compare tool memories" / "cross-tool memory" | `memory-bridge` | -| "/daily-update" / "morning sync" / "refresh the wiki index" / "set up the daily cron" / "install terminal notification" | `daily-update` | -| "/impl-validator" / "check this implementation" / "validate what you did" / "is this correct?" | `impl-validator` | -| "/wiki-switch NAME" / "switch to my work wiki" / "switch vault" / "change wiki" / "list my wikis" / "show my vaults" / "create a new vault config" | `wiki-switch` | -| "/wiki-digest" / "what did I learn this week" / "weekly digest" / "knowledge summary" / "what's new in my wiki" / "summarize my recent learning" / "monthly review" | `wiki-digest` | - -## Cross-Project Usage - -The main use case: you're working in some other project and want to sync knowledge into your wiki or query it. Two global skills handle this — `wiki-update` and `wiki-query`. They work from any directory. - -### wiki-update (write to wiki) - -1. Resolve config using the Config Resolution Protocol to get `OBSIDIAN_VAULT_PATH` -2. Scan the current project: README, source structure, git log, package metadata -3. Distill what's worth remembering (architecture decisions, patterns, trade-offs — not code listings) -4. Write to `$VAULT/projects/.md`, cross-linking to concept/entity pages as needed -5. Update `.manifest.json`, `index.md`, and `log.md` - -On repeat runs, it checks `last_commit_synced` in `.manifest.json` and only processes the delta via `git log ..HEAD`. - -### wiki-query (read from wiki) - -1. Resolve config using the Config Resolution Protocol to get `OBSIDIAN_VAULT_PATH` -2. Scan titles, tags, and `summary:` frontmatter fields first (cheap pass) -3. Only open page bodies when the index pass can't answer -4. Return a synthesized answer with `[[wikilink]]` citations - -## Visibility Tags (optional) - -Pages can carry a `visibility/` tag to mark their intended reach. **This is entirely optional** — untagged pages behave exactly as they always have (visible everywhere). The system stays single-vault, single source of truth. - -| Tag | Meaning | -|---|---| -| *(no tag)* | Same as `visibility/public` — visible in all modes | -| `visibility/public` | Explicitly public — visible in all modes | -| `visibility/internal` | Team-only — excluded when querying in filtered mode | -| `visibility/pii` | Sensitive data — excluded when querying in filtered mode | - -**Filtered mode** is opt-in, triggered by phrases like "public only", "user-facing answer", "no internal content", or "as a user would see it" in a query. Default mode shows everything. - -`visibility/` tags are **system tags** — they don't count toward the 5-tag limit and are listed separately from domain/type tags in the taxonomy. - -See `wiki-query` and `wiki-export` skills for how the filter is applied. - -## Core Principles - -- **Compile, don't retrieve.** The wiki is pre-compiled knowledge. Update existing pages — don't append or duplicate. -- **Track everything.** Update `.manifest.json` after ingesting, `index.md`, `log.md`, and `hot.md` after any write operation. -- **Connect with `[[wikilinks]]`.** Every page should link to related pages. This is what makes it a knowledge graph, not a folder of files. -- **Frontmatter is required.** Every wiki page needs: `title`, `category`, `tags`, `sources`, `created`, `updated`. -- **Single source of truth.** Visibility tags shape how content is surfaced — they don't duplicate or separate it. -- **Keep context warm.** `hot.md` is a ~500-word semantic snapshot of recent activity. Every write skill updates it so the next session can pick up where the last one left off without crawling the full vault. - -## Architecture Reference - -For the full pattern (three-layer architecture, page templates, project org), read `.agent/skills/llm-wiki/SKILL.md`. diff --git a/환영합니다!.md b/환영합니다!.md new file mode 100644 index 00000000..d80d118d --- /dev/null +++ b/환영합니다!.md @@ -0,0 +1,5 @@ +새로운 *보관함*입니다. + +내용을 한번 적어보세요, [[create a link]], 혹은 [임포터](https://help.obsidian.md/Plugins/Importer)를 사용해봐도 좋습니다! + +준비가 됐다면 이 노트를 삭제하고 맞춤형 보관함을 만들어보세요. \ No newline at end of file