协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
confluence-to-md【开发与工程】Convert Confluence pages to clean GitHub-Flavored Markdown files. Use this skill whenever the user wants to pull a Confluence page into the local repo, convert Confluence content to markdown, download a spec from Confluence, or batch-convert multiple pages. Also triggers on Confluence URLs, page IDs, or phrases like "pull this page", "download this s…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Pull Confluence pages into the local repo as clean markdown. The bundled script handles all the messy Confluence storage format edge cases (user mentions, complex tables, images, status badges) so you don't have to. Zero LLM tokens spent on the actual conversion.
# Single page
python3 .claude/skills/confluence-to-md/scripts/confluence-to-md.py <page_id> <output_path>
# Batch (write a Python loop - don't run CLI commands one by one)
python3 scripts/batch-convert.py
The script auto-loads credentials from .env at the project root.
Extract from the Confluence URL - it's the number in the path:
https://[your-instance].atlassian.net/wiki/spaces/[SPACE]/pages/1234567890/Page+Title
^^^^^^^^^^ this
If the user gives a title instead of URL, search via API:
curl -s -u "$CONFLUENCE_EMAIL:$CONFLUENCE_TOKEN" \
"$CONFLUENCE_BASE_URL/wiki/rest/api/content?spaceKey=[SPACE]&title=$(python3 -c 'import urllib.parse; print(urllib.parse.quote("Page Title"))')"
Follow your project's naming conventions. A common pattern:
| Content type | Path pattern |
|---|---|
| Feature specs | outputs/features/NNN-feature-name/feature-name.md |
| Knowledge docs | inputs/knowledge/slugified-title.md |
| Cross-functional | outputs/cross-functional/doc-name.md |
Folder naming - strip from Confluence titles:
[Author Name] SPEC | Feature -> featureSPEC |, PRD |, DOC | -> removePhase 2 | Product Overview -> use product namepython3 .claude/skills/confluence-to-md/scripts/confluence-to-md.py 1234567890 outputs/features/001-my-feature/my-feature.md
<a> tags with data-* attributes (embedded media) - replace with markdown linksimages/ subfolder automatically)Write a Python driver script for multiple pages:
import subprocess
pages = {
"1234567890": "outputs/000-topic-a/topic-a.md",
"9876543210": "outputs/001-topic-b/topic-b.md",
}
for page_id, output_path in pages.items():
subprocess.run(["python3", ".claude/skills/confluence-to-md/scripts/confluence-to-md.py", page_id, output_path], check=True)
For overview pages, don't convert - parse programmatically:
body.storage)<ac:link> tags with regexThe script automatically resolves these Confluence storage format quirks:
<time datetime="..."/> self-closing tags<ri:user> mentions (resolves display names via API, cached)<ac:link> without URLs (resolves from body.view)numberingColumn, colgroup, highlights[Yes]/[No] text<ac:image> attachments (downloaded to images/, handles CDN 302 redirects)Snapshot auto-save — after every successful pull, the script saves a copy
to .local/confluence-snapshots/<page_id>.md (auto-creates the folder). This
baseline is the "last known sync" — every new pull overwrites it.
Whenever you later push changes back to the same Confluence page, run the preflight FIRST to detect whether anyone edited that page on Confluence since your last pull. Without this check, you can silently overwrite other people's edits — a real-world incident that motivated this safeguard.
The preflight script lives inside this skill's scripts/ folder (and also
inside md-to-confluence/scripts/ — both copies work identically):
python3 .claude/skills/confluence-to-md/scripts/confluence-preflight.py <page_id> <local.md>
# OR equivalently:
python3 .claude/skills/md-to-confluence/scripts/confluence-preflight.py <page_id> <local.md>
Exit codes:
Use --show-diff to see full diffs, --force only if you deliberately want
to overwrite.
If something looks wrong in the output, read references/storage-format-gotchas.md for the full
list of 12 known issues and their fixes.
Scripts live INSIDE the skill folder, NOT in a shared .claude/scripts/ folder:
.claude/skills/confluence-to-md/scripts/confluence-to-md.py~/.claude/skills/confluence-to-md/scripts/confluence-to-md.pyNEVER use symlinks — always copy actual Python files. Symlinks break when the target moves.
Keep both locations in sync when modifying the script.
After conversion, automatically verify:
<ac: tags — grep output for <ac: to catch unconverted Confluence macrosimages/ folder exists, verify every  ref has a matching file# Title should be > Source: [Confluence](...)brew install pandoc).env with: CONFLUENCE_EMAIL, CONFLUENCE_TOKEN, CONFLUENCE_BASE_URL