{"id":"0169b0b7-4906-4700-a4e0-1c085bac4dd6","shortId":"cr5JFj","kind":"skill","title":"external-sync","tagline":"Search an external knowledge source and sync relevant content as notes into the Obsidian vault","description":"# External Source → Obsidian Sync\n\nSearch an external knowledge source for articles relevant to current areas of focus and create corresponding notes in the Obsidian vault at `~/Documents/obsidian-vault/`.\n\nThe Obsidian vault is the preferred workspace for user/model collaboration. The external source (e.g. Notion, Confluence, Google Docs) is upstream. This skill bridges the two — pulling relevant content into the vault where it becomes part of the interlinked knowledge graph.\n\n**Note:** This skill template uses Notion as the example external source. Replace the MCP tool calls (`mcp__notion__notion-search`, `mcp__notion__notion-fetch`) with whatever API your external source exposes.\n\n## Procedure\n\n### 1. Determine Areas of Focus\n\nIdentify what to search for by reading the vault:\n\n- Read the most recent daily note(s) to find active work, backlog items, and session topics.\n- Run a tag-line grep (`^#` across the vault) to get the current topic landscape.\n- Derive 3–8 search queries from: active projects, services under development, open decisions, backlog items, and architectural themes.\n\nIf invoked with an explicit topic (e.g. `/external-sync auth service`), use that as the primary focus and derive 1–2 additional related queries from vault context.\n\n### 2. Search the External Source\n\nFor each area of focus, search the external source with a focused semantic query.\n\nCollect candidate pages — titles, IDs, and snippet context. Discard results that are clearly irrelevant.\n\n### 3. Deduplicate Against the Vault\n\nBefore fetching any page, check whether a corresponding note already exists in the vault:\n\n- Grep for the page URL or title in existing vault notes.\n- If a vault note already links to the same page (via its `**Source**:` line), skip it unless the user explicitly asked for a refresh.\n\n### 4. Preview and Confirm\n\n**Do not write any vault notes yet.** Present the user with:\n\n1. **A TLDR for each high-value page** — 2–3 sentences summarising what the page contains and why it's relevant to current work.\n2. **A proposed sync plan** — table of pages to sync vs skip, with reasoning:\n\n```\n| Page | Action | Proposed vault name | Tags | Reason |\n|------|--------|---------------------|------|--------|\n| Auth Architecture | Sync | auth-architecture.md | #architecture #service/auth #external | Design doc for auth service |\n| Sprint Retro Notes | Skip | — | — | Not relevant to current work |\n```\n\n3. **Ask for confirmation** — wait for the user to approve, request changes, or ask questions before proceeding.\n\nOnly proceed to step 5 after the user confirms.\n\n### 5. Fetch and Transform\n\nFor each approved page, fetch its full content.\n\nTransform into a vault note following all PKM conventions:\n\n1. **H1 title** — use a clear, descriptive title.\n2. **Tags on line 2** — apply the vault's tag taxonomy. Always include a source tag (e.g. `#external` or `#notion`) to mark the note's origin.\n3. **Source line** — immediately after tags, add:\n   ```\n   **Source**: [<page title>](<URL>)\n   ```\n4. **Overview paragraph** — a concise summary of the page's content and why it's relevant.\n5. **Structured content** — distill the page into well-structured markdown. Do not blindly copy — reorganise and condense for the vault's conventions.\n6. **Wiki-links** — link to existing vault notes wherever concepts overlap. This is critical for integrating synced content into the knowledge graph.\n\n### 6. Report\n\nAfter syncing, output a summary:\n\n```\n## Sync Summary\n\n**Queries searched**: <list>\n**Pages found**: <N>\n**Notes created**: <N>\n**Skipped (already in vault)**: <N>\n\n### New notes\n- [[note-name]] — one-line description (from: <page title>)\n```\n\n## Constraints\n\n- **External source is read-only** — never create or modify pages in the external source.\n- **Vault conventions are mandatory** — every note created must follow the PKM skill's conventions (flat structure, tags, wiki-links, naming).\n- **Don't duplicate** — if the vault already has a note covering the same content, prefer adding a `**Source**:` link to the existing note rather than creating a duplicate.\n- **Condense, don't dump** — external pages can be verbose. Distill to what's useful.\n- **Prefer quality over quantity** — it's better to sync 3 high-value notes than 15 shallow ones.\n- **Source of truth chain** — codebase > external page > vault note. If a vault note from the external source conflicts with the codebase, the codebase wins. The vault note should flag the discrepancy.\n- **Always preview first** — never write vault notes without showing the user what will be synced and getting confirmation.\n\n## Usage\n\n```\n/external-sync                    # Auto-detect areas of focus from vault, search and sync\n/external-sync <topic>            # Search for a specific topic and sync relevant pages\n/external-sync refresh <topic>    # Re-sync even if notes already exist (updates existing notes)\n```","tags":["external","sync","claude","code","obsidian","skills","phelps-sg","agent-memory","agent-skills","claude-code","llm"],"capabilities":["skill","source-phelps-sg","skill-external-sync","topic-agent-memory","topic-agent-skills","topic-claude-code","topic-llm","topic-obsidian"],"categories":["claude-code-obsidian-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/phelps-sg/claude-code-obsidian-skills/external-sync","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add phelps-sg/claude-code-obsidian-skills","source_repo":"https://github.com/phelps-sg/claude-code-obsidian-skills","install_from":"skills.sh"}},"qualityScore":"0.456","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 12 github stars · SKILL.md body (4,897 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-19T00:41:28.048Z","embedding":null,"createdAt":"2026-04-19T00:41:28.048Z","updatedAt":"2026-04-19T00:41:28.048Z","lastSeenAt":"2026-04-19T00:41:28.048Z","tsv":"'/documents/obsidian-vault':45 '/external-sync':190,705,717,727 '1':120,201,311,425 '15':652 '2':202,209,320,336,433,437 '3':166,242,321,378,459,646 '4':296,467 '5':399,404,483 '6':506,529 '8':167 'across':156 'action':351 'activ':143,171 'ad':610 'add':465 'addit':203 'alreadi':256,276,545,601,735 'alway':444,686 'api':114 'appli':438 'approv':387,410 'architectur':181,358,361 'area':33,122,216,709 'articl':29 'ask':292,379,391 'auth':191,357,367 'auth-architecture.md':360 'auto':707 'auto-detect':706 'backlog':145,178 'becom':79 'better':643 'blind':496 'bridg':68 'call':101 'candid':229 'chain':658 'chang':389 'check':251 'clear':240,430 'codebas':659,675,677 'collabor':55 'collect':228 'concept':516 'concis':471 'condens':500,623 'confirm':299,381,403,703 'conflict':672 'confluenc':61 'constraint':558 'contain':327 'content':12,73,415,477,485,524,608 'context':208,235 'convent':424,505,575,587 'copi':497 'correspond':38,254 'cover':605 'creat':37,543,566,580,620 'critic':520 'current':32,162,334,376 'daili':138 'decis':177 'dedupl':243 'deriv':165,200 'descript':431,556 'design':364 'detect':708 'determin':121 'develop':175 'discard':236 'discrep':685 'distil':486,632 'doc':63,365 'dump':626 'duplic':597,622 'e.g':59,189,449 'even':732 'everi':578 'exampl':94 'exist':257,269,512,616,736,738 'explicit':187,291 'expos':118 'extern':2,6,19,25,57,95,116,212,221,363,450,559,572,627,660,670 'external-sync':1 'fetch':111,248,405,412 'find':142 'first':688 'flag':683 'flat':588 'focus':35,124,198,218,225,711 'follow':421,582 'found':541 'full':414 'get':160,702 'googl':62 'graph':85,528 'grep':155,261 'h1':426 'high':317,648 'high-valu':316,647 'id':232 'identifi':125 'immedi':462 'includ':445 'integr':522 'interlink':83 'invok':184 'irrelev':241 'item':146,179 'knowledg':7,26,84,527 'landscap':164 'line':154,285,436,461,555 'link':277,509,510,593,613 'mandatori':577 'mark':454 'markdown':493 'mcp':99,102,107 'modifi':568 'must':581 'name':354,552,594 'never':565,689 'new':548 'note':14,39,86,139,255,271,275,305,371,420,456,514,542,549,551,579,604,617,650,663,667,681,692,734,739 'note-nam':550 'notion':60,91,103,105,108,110,452 'notion-fetch':109 'notion-search':104 'obsidian':17,21,42,47 'one':554,654 'one-lin':553 'open':176 'origin':458 'output':533 'overlap':517 'overview':468 'page':230,250,264,281,319,326,343,350,411,475,488,540,569,628,661,726 'paragraph':469 'part':80 'pkm':423,584 'plan':340 'prefer':51,609,637 'present':307 'preview':297,687 'primari':197 'procedur':119 'proceed':394,396 'project':172 'propos':338,352 'pull':71 'qualiti':638 'quantiti':640 'queri':169,205,227,538 'question':392 'rather':618 're':730 're-sync':729 'read':131,134,563 'read-on':562 'reason':349,356 'recent':137 'refresh':295,728 'relat':204 'relev':11,30,72,332,374,482,725 'reorganis':498 'replac':97 'report':530 'request':388 'result':237 'retro':370 'run':150 'search':4,23,106,128,168,210,219,539,714,718 'semant':226 'sentenc':322 'servic':173,192,368 'service/auth':362 'session':148 'shallow':653 'show':694 'skill':67,88,585 'skill-external-sync' 'skip':286,347,372,544 'snippet':234 'sourc':8,20,27,58,96,117,213,222,284,447,460,466,560,573,612,655,671 'source-phelps-sg' 'specif':721 'sprint':369 'step':398 'structur':484,492,589 'summari':472,535,537 'summaris':323 'sync':3,10,22,339,345,359,523,532,536,645,700,716,724,731 'tabl':341 'tag':153,355,434,442,448,464,590 'tag-lin':152 'taxonomi':443 'templat':89 'theme':182 'titl':231,267,427,432 'tldr':313 'tool':100 'topic':149,163,188,722 'topic-agent-memory' 'topic-agent-skills' 'topic-claude-code' 'topic-llm' 'topic-obsidian' 'transform':407,416 'truth':657 'two':70 'unless':288 'updat':737 'upstream':65 'url':265 'usag':704 'use':90,193,428,636 'user':290,309,385,402,696 'user/model':54 'valu':318,649 'vault':18,43,48,76,133,158,207,246,260,270,274,304,353,419,440,503,513,547,574,600,662,666,680,691,713 'verbos':631 'via':282 'vs':346 'wait':382 'well':491 'well-structur':490 'whatev':113 'wherev':515 'whether':252 'wiki':508,592 'wiki-link':507,591 'win':678 'without':693 'work':144,335,377 'workspac':52 'write':302,690 'yet':306","prices":[{"id":"7224420f-3ed8-44a6-814b-ce230ba02223","listingId":"0169b0b7-4906-4700-a4e0-1c085bac4dd6","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"phelps-sg","category":"claude-code-obsidian-skills","install_from":"skills.sh"},"createdAt":"2026-04-19T00:41:28.048Z"}],"sources":[{"listingId":"0169b0b7-4906-4700-a4e0-1c085bac4dd6","source":"github","sourceId":"phelps-sg/claude-code-obsidian-skills/external-sync","sourceUrl":"https://github.com/phelps-sg/claude-code-obsidian-skills/tree/main/skills/external-sync","isPrimary":false,"firstSeenAt":"2026-04-19T00:41:28.048Z","lastSeenAt":"2026-04-19T00:41:28.048Z"}],"details":{"listingId":"0169b0b7-4906-4700-a4e0-1c085bac4dd6","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"phelps-sg","slug":"external-sync","github":{"repo":"phelps-sg/claude-code-obsidian-skills","stars":12,"topics":["agent-memory","agent-skills","claude-code","llm","obsidian"],"license":null,"html_url":"https://github.com/phelps-sg/claude-code-obsidian-skills","pushed_at":"2026-03-02T08:39:40Z","description":"Claude Code skills that turn an Obsidian vault into a shared human/AI knowledge base","skill_md_sha":"f4035c502f9f2f407cc274df0b94c4cd66381f27","skill_md_path":"skills/external-sync/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/phelps-sg/claude-code-obsidian-skills/tree/main/skills/external-sync"},"layout":"multi","source":"github","category":"claude-code-obsidian-skills","frontmatter":{"name":"external-sync","description":"Search an external knowledge source and sync relevant content as notes into the Obsidian vault"},"skills_sh_url":"https://skills.sh/phelps-sg/claude-code-obsidian-skills/external-sync"},"updatedAt":"2026-04-19T00:41:28.048Z"}}