ホーム / 全スキル / コンテンツ制作 / canghe-format-markdown
コンテンツ制作 · freestylefly/canghe-skills

canghe-format-markdown

プレーンテキストやMarkdownファイルを、frontmatter、タイトル、要約、見出し、太字、リスト、コードブロックを用いて整形します。ユーザーが「markdownを整形して」「記事を美しくして」「フォーマットを追加して」、または記事のレイアウト改善を求めた際に使用します。{filename}-formatted.md に出力されます。

L4 高権限 · 段階的認可と監査V1 コミット固定コマンド実行ネットワーク通信ファイル書き込みDual-pass Audit
Author freestyleflyGitHub freestylefly/canghe-skills ↗License MIT(仓库根 LICENSE)Commit dd0bf35595
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

明確な役割分担:コンテンツ分析と構造化はClaude(LLM)がStep 1〜6で行い、スクリプトは最終ステップ(Step 7)で組版修復のみを実行します。

skills/canghe-format-markdown/SKILL.md
Claude performs content analysis and formatting (Steps 1-6), then runs the script for typography fixes (Step 7).
ここでの処理内容:「LLMが構造化+スクリプトが組版」を担当するハイブリッド型skillです。スクリプトは決定論的な組版を担当し、コンテンツの理解は行いません。

コンテンツタイプを先行判定:frontmatter/見出し/太字/リスト/コードブロック/引用のいずれかに一致すればmarkdownと判定し、すべて不一致の場合のみプレーンテキストとして扱います。

skills/canghe-format-markdown/SKILL.md
| Has `---` YAML frontmatter | Markdown |
ここでの処理内容:タイプによって後続の分岐が決定されます。プレーンテキストは直接Step 2のフォーマットへ進み、markdownの場合はまずユーザーに確認します。

markdown検出時はユーザーに3つの選択肢を提示:フォーマット最適化、現状維持、組版修復のみ(後者は元のファイルを直接変更)。

skills/canghe-format-markdown/SKILL.md
1. Optimize formatting (Recommended)
ここでの処理内容:3つのパスによって以降でスキップするStepが決まります。「組版修復のみ」は成果物のコピーをスキップし、ユーザーの元ファイルをインプレースで書き換えます。

frontmatterの自動補完:title/slug/summary/coverImageなどのメタフィールドをYAMLに書き込み、summaryはモデルによって100〜150文字の要約として生成されます。

skills/canghe-format-markdown/SKILL.md
| `summary` | Generate engaging summary (100-150 characters) |
ここでの処理内容:slugはファイルパスから推測するかタイトルから生成します。coverImageは同ディレクトリにimgs/cover.pngが存在する場合のみ相対パスを使用します。

タイトルの重複排除:本文の1行目がH1の場合、frontmatterのtitleに抽出し本文から削除することで、本文内でのH1の重複を防ぎます。

skills/canghe-format-markdown/SKILL.md
2. If first line is H1 → extract to frontmatter `title`, remove H1 from body
ここでの処理内容:モデルが候補タイトルを3つ生成し、AskUserQuestionでユーザーに選択させます。タイムアウト時は推奨項目が採用されます。

出力ファイル名は {original-filename}-formatted.md に固定され、上書き前に同名の既存成果物をタイムスタンプ付きでリネームしてバックアップします。

skills/canghe-format-markdown/SKILL.md
mv "{filename}-formatted.md" "{filename}-formatted.backup-$(date +%Y%m%d-%H%M%S).md"
ここでの処理内容:final.md → final-formatted.md。既に存在する場合は、書き込み前に final-formatted.backup-20260128-143052.md としてバックアップします。

組版スクリプト main.ts がファイルを読み込み、オプションに従って処理した上でインプレースで書き戻します。処理は決定論的な文字列/構文木の変換です。

skills/canghe-format-markdown/scripts/main.ts
writeFileSync(filePath, formattedContent, "utf-8");
ここでの処理内容:main.ts は readFileSync で読み込み、処理を行い、writeFileSync で同一パスに書き込むため、「組版修復のみ」ではユーザーの元ファイルが直接変更されます。

スクリプトは複数の組版スイッチを提供:CJK強調の修復、CJK/英字のスペース調整、ASCII→全角引用符の変換、frontmatter YAMLのフォーマット。

skills/canghe-format-markdown/SKILL.md
| `scripts/quotes.ts` | Replace ASCII quotes with fullwidth quotes |
ここでの処理内容:--quotes/--spacing/--emphasis およびそれぞれの反対フラグ --no-* があります。スクリプトのデフォルトは spacing+emphasis が有効、quotes が無効です。

スペースの修復は自前実装ではなく、execSync を介して外部の npx autocorrect-node CLI を呼び出して実行されます。

skills/canghe-format-markdown/scripts/autocorrect.ts
execSync(`npx autocorrect-node --fix "${filePath}"`, { stdio: "inherit" });
ここでの処理内容:filePath がシェルコマンドに文字列補間によって結合されて実行されます。これが本skillのインジェクション攻撃面となります(security.injection_surface を参照)。

スクリプトはremarkエコシステム(remark-cjk-friendly / remark-frontmatter / remark-gfm / unified など)に依存し、YAMLライブラリでfrontmatterの読み書きを行います。

skills/canghe-format-markdown/scripts/package.json
"remark-cjk-friendly": "^1.1.0",
ここでの処理内容:依存関係は package.json / package-lock.json / bun.lock で宣言・ロックされており、npx -y bun でTSを直接実行します。

2コア機能

01プレーンテキスト/半構造化テキスト → 正規のmarkdown成果物への変換
02frontmatter / title / slug / summary / coverImage の自動生成
03CJK強調(emphasis/bold)の約物修復
04CJK/英字混在のスペース調整(autocorrect)
05ASCII引用符 → 全角引用符への置換
06上書き前の自動タイムスタンプバックアップ
07対話的なタイトル選択(3つの候補 + ユーザー確認)
08markdown検出後の3択ワークフロー(最適化/現状維持/組版のみ)

3外部依存関係

KindDependency / Endpoint
clibun / npx(npx -y bun 运行 main.ts)
packageautocorrect-node(npx 第三方 CLI,由 autocorrect.ts 调起)
packageremark 生态(remark-cjk-friendly / remark-frontmatter / remark-gfm / unified 等)
networkregistry.npmjs.org(依赖与 npx 包拉取来源)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
段階的・都度認可、サンドボックス推奨
管理者向け
承認フロー、ロールバック可能、全履歴監査
判定根拠(ファイルパスと抜粋)
  • scripts/: ローカルスクリプトまたはコマンドの実行: scripts/main.ts(npx -y bun で実行:ファイル読み込み → 組版処理 → インプレース書き戻し)
  • 网络端点: 外部ネットワークアクセスの宣言: registry.npmjs.org(npx が初回実行時に autocorrect-node と bun 依存関係を取得。npx パッケージのバージョンは本リポジトリで未固定)
  • 本地工作目录: ファイル読み書きおよび成果物の出力: {filename}-formatted.md(正式成果物)
監査ノート: 評価対象=本skillディレクトリ(SKILL.md + scripts/{main,quotes,autocorrect}.ts + package.json/package-lock.json/bun.lock):ディレクトリ内の動作=ローカルでの読み書き(ユーザーのmd読み込み、-formatted.md の書き込み、元ファイルのインプレース変更、バックアップ作成)に加え、固定の公開エンドポイントへの外部通信が1回発生(autocorrect.ts の execSync は、デフォルトで spacing 有効時に npx を使って registry.npmjs.org からサードパーティ製CLIを取得・実行し、バージョンは本リポジトリ内でロックされていません)。認証情報や秘密情報の読み取り、リバースエンジニアリング、なりすまし、保護の回避、セキュリティのダウングレード、ユーザーコンテンツの業務バックエンドへの送信は存在しないため、オレンジ/赤ではなくイエロー判定となります。注意点:①「組版修復のみ」ルートではユーザーの元ファイルがインプレースで直接変更される点、② autocorrect.ts の execSync の文字列補間にコマンドインジェクション面が存在する点(引数配列を用いれば回避可能)、③ バージョン未固定の npx パッケージ実行に伴うサプライチェーンの不確実性。

5二重目の独立検証

  • [ok] 无业务网络请求,仅 npx 拉包 — §3 URL 命中集中在 package-lock.json 的 registry/赞助链接;脚本无业务端点调用,唯一外发是 npx 拉 autocorrect-node。
  • [ok] 本地读写与原地修改 — main.ts 以 readFileSync/writeFileSync 同路径读写;SKILL.md 的「Typography fixes only」路径直接改原文件,无副本。
  • [ok] CJK 排版三能力 — emphasis(remark-cjk-friendly)、spacing(autocorrect-node)、quotes(quotes.ts 全角替换)三项在脚本职责与 SKILL.md 选项中均有对应。
  • [ok] execSync 命令注入面 — autocorrect.ts 用模板串把 filePath 插进 shell 命令;同类 baoyu 版用 spawnSync(npxCmd, [...args]) 的数组形式,本版更弱,已记入 injection_surface 与 risks。
  • [ok] 无凭证读取 — 目录内无 env/keychain/cookie 读取;仅检查 EXTEND.md 偏好文件是否存在(非凭证)。
  • [ok] 与 baoyu 同型实现的差异 — canghe 版无 references/ 与分析底稿,目录更精简(7 文件);排版脚本形态由 spawnSync 改为 execSync。
  • [ok] 依赖可复现性 — remark 生态在 package.json/package-lock.json/bun.lock 有锁定;但 npx autocorrect-node 未锁定具体版本。

6結論

  • CJK優先の組版:強調修復+中英スペース調整+全角引用符など、明確に中国語等の執筆環境を対象とした設計。
  • 規律あるバックアップ:同名成果物を上書きする前にタイムスタンプでリネームし、誤上書きによる損失リスクを低減。
  • 固定された出力構造:成果物名は {filename}-formatted.md に統一され、frontmatter/title/summary 生成と連携。
  • ローカル処理で業務ネットワーク通信なし:npx によるパッケージ取得を除き、記事コンテンツを外部サービスに送信しません。
  • 保守的なフォーマット制約:原意を変更せず、原文にないコンテンツを追加しないことが明示的に求められています。
  • 最適な用途: 下書きや半構造化テキストを正規のmarkdown(frontmatter、タイトル、リスト、中英スペース、全角引用符の追加など)に整理したい執筆者や、記事公開前の固定組版プロセスとしての利用に適しています。
    不向きな用途: 元ファイルを一切変更してはならない環境(「組版修復のみ」はインプレースで書き換えます)、npx/Node 環境のない完全オフライン環境、バージョン未固定のサードパーティ製 npx パッケージによるサプライチェーンリスクに厳しいチーム開発には適していません。
    Install Agent-Ready
    ① Verified Mirror 2026-10-10
    Option A · Direct DownloadDownload canghe-format-markdown.tar.gz
    sha256: 535df884a21e0d2e…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit dd0bf35595.