Communityライティング&編集github.com

Denshoスキル

AIアシスタントがDenshoワークスペース内でMCPを通じてページの検索、読み取り、書き込み、コメントを行う方法を教えるエージェントスキルです。

Denshoスキル とは?

Denshoスキルは、AIエージェント(Claude Code、Cortex、Copilotなど)がセルフホスト型ナレッジベース「Densho」を操作するための標準手順を提供します。このスキルは、MCPサーバーを介して接続されたワークスペース内のスペース、ページツリー、ライブ共同編集ドキュメントへのアクセスを実現します。主な機能として、`search_pages`による重複防止、`get_markdown_reference`による正確なマークダウン方言の取得、`add_comment`による丁寧なコメント機能、そして`update_page`を使用する際の必須ルール(事前読み取り・マージ・トークン確認)が含まれます。また、サポートされていない機能(生HTML、GitHub callouts、脚注、ファイルアップロードなど)や、チームへの影響(ページ編集の即時反映、Verifiedステータスのリセット、コメント通知)についても注意喚起します。このスキルは、異なるバージョンのDenshoインスタンス(トークン有無)に対応し、翻訳や構造化されたドキュメント作成のベストプラクティスも提供します。

対応~Claude Code~Codex CLI✓Cursor
npx skills add DenshoApp/densho-skill

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Densho

Denshoはセルフホスト型のナレッジベースです。ワークスペースにはスペースが含まれ、各スペースはページのツリー構造を持ち、すべてのページは他のユーザーが同時に編集している可能性があるライブ共同編集ドキュメントです。

アクセスはユーザーが接続したMCPサーバーを通じて行います。あなたのアクセス権限はユーザーとまったく同じです。ツールが何も返さない場合、それはワークスペースが空であることを意味するのではなく、そのスペースがそのユーザーの読み取り可能なスペースではないことを意味します。

書き込みに関する唯一のルール

update_pageは本文全体を置き換えます。 追加ではありません。事前に読み取らずに書き込むと、そこにあった内容が失われます。

最近のインスタンスではこれを強制しています。内容の置き換えにはexpectedVersion(get_pageが返すトークン)が必要です。読み取った後にページが変更された場合、またはIDが間違っている場合、書き込みは黙って適用されるのではなく拒否されます。読み取り、マージ、書き込みの手順は以下の通りです。

  1. get_pageは{ version, title, content }を返します
  2. その内容から完全な新しい本文を構築します
  3. contentとexpectedVersion: <version>を指定してupdate_pageを実行します

ページが変更されたという応答があった場合は、再度読み取り、マージをやり直してください。古いバージョンでリトライしたり、読み取っていない内容を削除してガードを回避したりしないでください。

古いインスタンスにはそのようなトークンはありません。get_pageは先頭に# H1としてタイトルが付加された1つのマークダウンドキュメントを返します。本文にはタイトルは含まれていません。それをそのままupdate_pageに渡すと、タイトルが本文に書き込まれ、ページにタイトルが2回表示されます。書き込む前にその最初の見出しを削除し、残りの部分にも同様の注意を払ってください。不正な書き込みを止めるものは何もないため、書き込む直前にページを読み取り、意図的に変更しないものはすべて保持してください。

何かに触れる前に

  • 作成する前に検索してください。 まずsearch_pagesを実行します。Wikiは重複によって衰退します。作成しようとしているページが別のタイトルで存在していることはよくあります。
  • ページ本文を作成する前に、セッションごとに1回get_markdown_referenceを呼び出してください。 このツールはインスタンス自体から、そのインスタンスがレンダリングする正確な方言を返すため、古くなることはありません。記憶から構文を推測したり、GitHub Flavored Markdownを仮定したりしないでください。ツールが提供されていない場合、そのインスタンスは古いものです。以下の「機能しないもの」の制約に従い、ユーザーに自身のワークスペースのGuide > Editor > "Markdown in and out" を参照するよう指示してください。
  • 変更を依頼されていないページでは、編集よりもコメントを優先してください。 add_commentはテキストの横にあなたのコメントを配置し、作成者に通知します。これは他人の作業に対する丁寧な行動です。
  • ページを作成する前に、list_pagesでページが属する場所を特定してください。 Wikiはツリー構造であり、スペースのルートに置かれたページは誰にも見つけられません。parentPageIdを渡してください。
  • あなた自身のデフォルト言語ではなく、周囲のページの言語で書いてください。 ワークスペースは多くの場合、全体を通して1つの言語で書かれており、別の言語のページは侵入者のように見えます。

ツール

読み取り。 list_spaces(ユーザーが所属するスペース)、list_pages(スペースのページツリーを親子関係付きフラットリストとして取得)、search_pages(全文検索、オプションでスペースを指定、最大20件、ページネーションなし。そのため、リストを完全な真実と見なさず、クエリを絞り込んでください)、get_page(タイトルと本文をマークダウン、およびバージョントークンとして取得)、list_comments(スレッドとその解決状態の一覧)

書き込み。 create_page(スペース内、オプションで親の下、オプションで本文付き)、update_page(タイトルおよび/または全文)、add_comment(新しいスレッド、またはparentCommentIdによる返信)、resolve_comment

ページはdensho://page/{id}リソースとしても公開されているため、クライアントは直接ページを添付できます。

すべてのインスタンスがすべてのツールを提供するわけではありません。書き込みツールは、ユーザーが認可時に書き込みアクセスを許可した場合にのみ存在します。また、古いインスタンスではコメント一覧、解決ツール、マークダウンリファレンスが欠けている場合があります。クライアントが実際に表示するツールで作業し、実行できない編集を説明するのではなく、その旨を伝えてください。

人が読むページを書く

チャットの回答のようにではなく、ドキュメントのように構造化してください。セクションの内容を示す見出し、短い段落、リストとして表現すべき内容にはリストを使用します。

  • :::info、:::warning、その他のコールアウトは、読者を本当に中断させるものに使用します。3つのコールアウトを連続して使用すると、どれも効果がありません。
  • :::toggleは、ほとんどの読者が読み飛ばす詳細に使用し、答えを隠すためには使用しないでください。
  • :::subpagesは、手書きのリンクリスト(誰かがページを追加すると古くなる)ではなく、子ページのインデックスに使用します。
  • ペアの列挙段落よりもテーブルを優先してください。

エディタがサポートするすべての要素はマークダウンを介してラウンドトリップするため、あなたが書いたものがユーザーに見えるものになり、後でエクスポートされるものになります。ラウンドトリップの過程で正規化が行われます。$$maths$$は3行で戻ってきたり、ブロック間に空白行が挿入されたりします。送信したものと少し異なる形状で読み戻されることは正常であり、何かが失敗した兆候ではありません。

機能しないもの

  • 生のHTMLタグはエスケープされ、テキストとして表示されます。フェンス付きの```htmlrender ブロックがHTMLをレンダリングする方法であり、自己完結している必要があります(ネットワーク不要、外部アセット不要)。
  • GitHubコールアウト(> [!NOTE])はこの方言の一部ではありません。括弧はエスケープされ、読者にはプレーンな引用内で\[!NOTE\]と表示されます。コールアウトを使用してください。
  • 脚注はここでは役に立ちません。text[^1]とその[^1]: note定義は[^1](note)として出力され、何も指さないリンクになります。余談はインラインまたはコールアウトで記述してください。
  • ```mathフェンスはレンダリングされません。 ブロック数式は$$ ... $$です。
  • 何もアップロードできません。 ファイルツールや画像ツールはないため、ローカルパスや追加したと主張するファイルを指すマークダウン画像を決して書かないでください。すでにページ内にある画像は機能し続けるため、本文を書き換える際にそのリンクはそのままにしてください。
  • 決してチップIDをでっち上げないでください。 メンション、ページリンク、同期ブロックは実際のIDをエンコードします([@名前](mention:<userId>)、[ラベル](page:<pageId>)、![[synced-blocks/...]])。でっち上げたIDは死んだチップとしてレンダリングされます。ツールから取得した実際のIDを使用するか、プレーンなリンクを書いてください。

チームに影響を与えること

  • あなたを通じて編集されたページは、それを開いている他のユーザーのエディタに瞬時に、カーソルの下に表示されます。誰かが作業中に長いページを書き換えることは、技術的に安全であっても混乱を招きます。
  • Verified(検証済み) とマークされたページを編集すると、そのページは「Ready to verify」(検証待ち)に戻り、管理者の作業が増えます。編集する際はその旨を伝えてください。
  • コメントはユーザーに通知します。軽微な修正で済むことについてスレッドを開いたり、対処していないスレッドを解決しないでください。

報告方法

ユーザーには、生のIDではなく、ページのタイトルとその場所を伝えてください。何を変更したか明確に述べてください。全文置き換えの場合はそのように明記し、既存のページにテキストをマージした場合は、何を保持したかを伝えてください。

関連スキル