Knowledge Organizer
by @cjke84
Use when importing articles, organizing notes, or syncing a knowledge base across Obsidian, Feishu, and Tencent IMA with OpenClaw or Codex.
clawhub install knowledge-organizer📖 About This Skill
name: knowledge-organizer description: Use when importing articles, organizing notes, or syncing a knowledge base across Obsidian, Feishu, and Tencent IMA with OpenClaw or Codex. version: 0.1.2 metadata: openclaw: requires: env: - OPENCLAW_KB_ROOT - IMA_OPENAPI_CLIENTID - IMA_OPENAPI_APIKEY bins: - python3 anyBins: - openclaw integrations: - openclaw-lark - xiaohongshu-mcp optionalEnv: - FEISHU_WIKI_SPACE - FEISHU_FOLDER_TOKEN - FEISHU_WIKI_NODE - FEISHU_KB_ID - FEISHU_FOLDER_ID - FEISHU_IMPORT_ENDPOINT primaryEnv: OPENCLAW_KB_ROOT skillKey: knowledge-organizer homepage: https://github.com/cjke84/knowledge-organizer
Knowledge Organizer
This skill turns article links, drafts, and notes into structured Markdown with duplicate checks, tags, summaries, related-note suggestions, image downloads, and optional sync targets for Obsidian, Feishu, and Tencent IMA.
Use Cases
Capabilities
draft.images is present, download images into assets/ and keep relative references in the note body; common fields like src, data_src, data-original, data-lazy-src, srcset, url, image_url, and original are supportedopenclaw-lark plugindestination=obsidian|feishu|ima with mode=once|syncUsage
destination=obsidian, provide vault_root, and let the runtime write directly to local markdown files.destination=feishu and make sure the OpenClaw openclaw-lark plugin is available for feishu_create_doc and feishu_update_doc.FEISHU_WIKI_NODE, FEISHU_WIKI_SPACE / FEISHU_KB_ID, or FEISHU_FOLDER_TOKEN / FEISHU_FOLDER_ID when your OpenClaw host needs an explicit target location.python3 -m scripts.knowledge_sync CLI cannot inject an OpenClaw transport on its own; use it for validation or dry-run, and run real Feishu imports through an OpenClaw host/plugin transport.FEISHU_IMPORT_ENDPOINT is only for explicit custom transport setups; do not set it unless you intentionally want to override the default OpenClaw plugin path.destination=ima and configure IMA_OPENAPI_CLIENTID and IMA_OPENAPI_APIKEY before syncing.mode=once for a single import run, or mode=sync to skip items whose content hash has not changed.scripts/knowledge_sync.py, and can be used with --markdown-path, --folder-path, or --link.Usage Examples
python3 -m scripts.knowledge_sync --destination obsidian --mode once --state .sync-state.json --vault-root /path/to/vault --markdown-path draft.mdpython3 -m scripts.knowledge_sync --destination feishu --mode once --state .sync-state.json --markdown-path draft.md --dry-runopenclaw-lark / feishu_create_doc / feishu_update_docpython3 -m scripts.knowledge_sync --destination ima --mode sync --state .sync-state.json --folder-path drafts/--disable obsidian,feishu to skip the selected targets when invoking the sync orchestrator.Workflow
1. Get content: use a browser for public-account links, prefer xiaohongshu-mcp for Xiaohongshu links, use web_fetch for other web pages, and process user-provided content directly
2. Normalize the source: use scripts/import_sources.py, scripts/import_normalizer.py, and scripts/import_models.py to build a shared ImportDraft
3. Check duplicates before final write: prefer URL + title + similarity checks, and treat duplicate hits as normal control flow
4. Choose a destination: scripts/knowledge_sync.py dispatches to obsidian, feishu, or ima
5. Render or import: scripts/obsidian_note.py generates the content and destination path, while scripts/feishu_kb.py and scripts/ima_kb.py build the sync payloads
6. Write or sync: runtime writes directly to destination_path for Obsidian, or stores SyncStateRecord for Feishu/IMA
For WeChat public-account imports, read references/wechat-import.md before doing browser extraction, image handling, or final write.
Execution Rules
scripts/check_runtime.py to confirm Python and knowledge-base paths are availableopenclaw-lark plugin (feishu_create_doc / feishu_update_doc) and use Lark Markdown with / import_doc flow with IMA_OPENAPI_CLIENTID and IMA_OPENAPI_APIKEYContract
RenderedNote(content, destination_path) for Obsidian, or a SyncStateRecord-backed import result for Feishu/IMAtitle, aliases, tags, source_type, source_url, published, created, updated, importance, status, and canonical_hashOPENCLAW_KB_ROOT when availabletitle + markdown + placement fields (folder_token / wiki_node / wiki_space)content_format=1, content, and optional folder_idWeChat Notes
mp.weixin.qq.com) are a special case: default to browser, not web_fetchreferences/wechat-import.md when extracting正文data-src, then src, then data-original / data_src / originalfrom=appmsg on WeChat image URLs when neededdata-src as the final src)browser act with evaluation must include fn; missing fn is a caller error, not a reason to improvise blindlyXiaohongshu Notes
xiaohongshu-mcp, not generic web_fetchdetail for complete note content; use search → detail only when direct note identifiers are missingdraft.images Example
images:
- path: /absolute/path/to/local.png
alt: Local image
- src: https://example.com/cover.png
alt: Remote image
- srcset: https://example.com/cover-1x.png 1x, https://example.com/cover-2x.png 2x
alt: Responsive image
path is for local files. src / data_src / data-original / data-lazy-src / original etc. are used for remote images; srcset prefers the highest-value candidate.
Compatibility
OpenClaw 2026.3.22 Notes
SKILL.md, scripts/, references/, and tests/ togetheropenclaw skills install / openclaw skills update for native skill management, or install through ClawHub / bundle flows when packaging this repository for distributionknowledge-organizer so bundle-to-skill mapping stays stable across OpenClaw and Codex environmentsOPENCLAW_KB_ROOT when it is availableopenclaw-lark plugin being installed and configured, with feishu_create_doc / feishu_update_doc available in the OpenClaw hostFEISHU_WIKI_SPACE, FEISHU_FOLDER_TOKEN, FEISHU_WIKI_NODE, FEISHU_KB_ID, and FEISHU_FOLDER_ID are optional routing hints, not always-required secretsxiaohongshu-mcp being available before the workflow reaches structured note extractionIMA_OPENAPI_CLIENTID and IMA_OPENAPI_APIKEYCLAWDBOT_* / MOLTBOT_* env names, or removed OpenClaw plugin SDK shimsProject Links
Output Template
✅ Stored in knowledge base📁 Location: knowledge-base/xxx.md
🏷️ Tags: tag1, tag2, tag3
📋 Summary: one-sentence summary
⭐ Importance: core
🔗 Related notes: xxx, yyy
⚡ When to Use
💡 Examples
destination=obsidian, provide vault_root, and let the runtime write directly to local markdown files.destination=feishu and make sure the OpenClaw openclaw-lark plugin is available for feishu_create_doc and feishu_update_doc.FEISHU_WIKI_NODE, FEISHU_WIKI_SPACE / FEISHU_KB_ID, or FEISHU_FOLDER_TOKEN / FEISHU_FOLDER_ID when your OpenClaw host needs an explicit target location.python3 -m scripts.knowledge_sync CLI cannot inject an OpenClaw transport on its own; use it for validation or dry-run, and run real Feishu imports through an OpenClaw host/plugin transport.FEISHU_IMPORT_ENDPOINT is only for explicit custom transport setups; do not set it unless you intentionally want to override the default OpenClaw plugin path.destination=ima and configure IMA_OPENAPI_CLIENTID and IMA_OPENAPI_APIKEY before syncing.mode=once for a single import run, or mode=sync to skip items whose content hash has not changed.scripts/knowledge_sync.py, and can be used with --markdown-path, --folder-path, or --link.