6.2 KiB
| name | description |
|---|---|
| import-draft | Import external drafts into content-forge vault for publishing workflow. Use when the user has an existing draft file from another project or external location and wants to bring it into the content-forge production pipeline. Trigger words: import draft, 迁移草稿, 入库, 导入文章, bring into vault, move to drafts. |
Import Draft
Import external draft files into content-forge vault's 02-drafts/ directory, preparing them for the standard publishing workflow (format → assets → review → publish).
When to Use
Use this skill when:
- User has a draft written outside the vault (another project, external file, etc.)
- User says "import this draft", "migrate this article", "bring into vault"
- Draft needs to go through content-forge publishing pipeline
- Draft may need modifications (image paths, frontmatter, etc.)
Do NOT use this skill when:
- Draft already exists in
02-drafts/→ use edit commands instead - User wants to create new content from topic → use
write-articleskill instead
Workflow
Step 1: Read External Draft
Read the external draft file using the Read tool.
Read the file at <external_path>
Execution requirements:
- Read the complete file content
- Note the file location and any embedded resources (images, etc.)
Step 2: Quality Check
Analyze the draft and list issues that need fixing before import.
Check for:
- Image references: Are paths correct? Do images exist?
- Frontmatter: Does it exist? Is it complete?
- Structure: Is the markdown well-formed?
- Content issues: Dead links, missing sections, formatting problems
Output format:
## 草稿检查报告
### 文件信息
- 路径: <original_path>
- 行数: <N>
- 大小: <X>KB
### 🔴 必须修改(入库前)
| # | 问题 | 当前 | 建议 |
|---|------|------|------|
| 1 | ... | ... | ... |
### 🟡 建议修改(可选)
| # | 问题 | 建议 |
|---|------|------|
| 1 | ... | ... |
### ✅ 无问题项
- ...
Step 3: Wait for User Confirmation
CRITICAL: Do NOT proceed to write without user confirmation.
Ask the user:
- Which issues to fix
- Whether to fix now or import as-is
- Confirmation before any vault write
Output:
请确认:
1. 需要修改哪些问题?
2. 现在修改还是先入库再改?
3. 确认后我将写入 vault
Step 4: Prepare Frontmatter
Generate standard frontmatter based on content-forge specification.
Required fields (see references/frontmatter-spec.md):
id,title,slug,status,content_type,channelslanguage,source_urls,assets,cover_image,templateowner,created_at,updated_at
Slug generation:
- Extract from filename if possible
- Or generate from title (lowercase, hyphens, no special chars)
- Format:
YYYY-MM-DD-<slug>.md
Step 5: Write to Vault
Write the draft to 02-drafts/ directory.
# First cd to vault directory
cd /home/kang/apps/content-forge/content-forge
# Create the draft file
obsidian create path="02-drafts/<YYYY-MM-DD>-<slug>.md" content="<DRAFT_WITH_FRONTMATTER>"
Execution requirements:
- Must cd to vault directory first (obsidian CLI bug workaround)
- File must go to
02-drafts/directory - Filename must have date prefix
Step 6: Set Frontmatter Properties
Set each frontmatter field using obsidian property:set.
# Required fields
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="id" value="<YYYY-MM-DD>-<slug>"
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="title" value="<title>"
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="slug" value="<slug>"
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="status" value="draft"
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="content_type" value="article"
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="channels" value='["wechat","x"]' type=list
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="language" value="zh-CN"
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="source_urls" value='[]' type=list
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="assets" value='[]' type=list
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="cover_image" value=""
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="template" value="article"
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="owner" value="content-forge"
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="created_at" value="<YYYY-MM-DD>T00:00:00+08:00"
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="updated_at" value="<YYYY-MM-DD>T00:00:00+08:00"
Step 7: Migrate Assets (Optional)
If the draft has images, offer to migrate them to 05-assets/<slug>/.
# Create assets directory
mkdir -p /home/kang/apps/content-forge/content-forge/05-assets/<slug>/
# Copy images
cp <external_image_paths> /home/kang/apps/content-forge/content-forge/05-assets/<slug>/
# Update draft's assets field
obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="assets" value='["05-assets/<slug>/cover.png"]' type=list
Output Constraints
- Always wait for user confirmation before writing to vault
- List all issues before asking for confirmation
- Generate complete frontmatter, don't skip required fields
- Report success/failure clearly after write
Quality Checklist
Before marking complete, verify:
- External draft fully read
- Quality issues listed and categorized
- User confirmed which issues to fix
- Frontmatter generated per spec
- Draft written to
02-drafts/ - All frontmatter fields set correctly
- Assets migrated (if applicable)
- Final verification:
obsidian read path="02-drafts/<file>"succeeds
Failure Handling
- File not found: Return
[✗] 文件不存在: <path> - Vault not accessible: Return
[✗] Vault 不可用,请运行 obsidian vault 检查 - Write failed: Return
[✗] 写入失败: <error>and do not proceed - User denies confirmation: Stop and wait for further instructions
References
references/frontmatter-spec.md— Complete frontmatter specification