ドキュメント & 設定マニュアル

MD-Memo 活用ガイド

0秒でひらめきを捕まえる軽量スクラッチパッド「MD-Memo」。
はじめて使う方の基本操作から、CLI・自律エージェント・JSON-RPCを駆使する玄人向けのカスタマイズまでを網羅しています。

01 はじめての方へ:MD-Memoの基本思想

ひとことで: NotionやObsidianと競合せず、その直前に置く「ゼロ抵抗の一時記憶バッファ」です。ひらめき・エラーログ・殴り書きを起動待ち0秒でファイルに貯め、必要に応じてナレッジベースへ流し込みます。
安心のための3つの設計
  1. 保存ボタンを押さなくて良い:1.5秒入力が止まるだけで自動保存されます。
  2. アプリを起動し直さなくて良い:常駐トレイから Ctrl+Alt+M でミリ秒復帰します。
  3. コードや英語入力で全角にイライラしない:IME Guardian が自動で全角誤爆を防ぎます。

AI まわりの機能は 「書く」「実行する」「任せる」 の3つの動詞に整理されていて、入口はそれぞれひとつだけです。

書くCtrl + L:選んだ文などをAIに質問。答えが下に入る(数秒)
実行するCtrl + E:コマンドの出力を下に挿入(ほぼ即座)
任せる1行書いて Ctrl + Enter:内容を見て自動で振り分け(エージェントは数分かけて作業)

まず覚える 8 つのキー(macOS では Ctrl を Cmd に読み替えます)

CtrlL
AIに質問
選んだ文・行・メモ全体についてAIに聞く
CtrlJ
アクション候補
次の一手を最大3件提案
CtrlE
コマンドバー
選んだテキストをコマンドに通す(Tab でAIモード)
CtrlEnter
自動セレクター
1行書いて押すと、LLM・エージェント・コマンドへ自動で振り分け
CtrlShiftP
コマンドパレット
機能をキーボードだけで検索・実行
CtrlShiftF
スクラップ検索
過去のメモを全文検索
CtrlShiftV
そのまま貼る
加工せずに貼る(Ctrl + V はMarkdownにして貼る)
CtrlShiftU
Mobile Drop
スマホから写真やテキストを送る

画面の各部の名前は 画面の見かた、どれを使うか迷ったときは 迷ったらこの表 をご覧ください。

画面の見かた

ひとことで: 画面は「タブ」「ツールバー」「エディタ」「ステータスバー」の4つです。ノートの中身は、ただのMarkdownテキストです。
MD-Memoのメイン画面。上にタブバーとツールバー、中央に行番号付きのエディタ、下にステータスバー
メイン画面:3つのタブ、ツールバー、エディタ、ステータスバー
  1. タブバー 開いているノート。未保存の変更は点で示され、+で新しいノートを開きます
  2. ツールバー 右側に、ファイルを開く・フォルダを開く・保存・検索・スクラップ検索・AIに質問・Mobile Drop・音声入力・分割/プレビュー・Zen モード・全画面・設定・ヘルプのアイコンが並びます
  3. エディタ 左端に行番号。中身は普通のMarkdownテキストです
  4. ステータスバー(左) カーソルの行・列と文字数
  5. 関連ノートのピル 開いたフォルダの中から、いま書いている内容に近いノート。クリックで開きます
  6. ステータスバー(右) Git同期・アクション・予測・自動保存・文字コードのバッジ

集中したいときは Zen モードShift + F11、macOS: Ctrl + Cmd + Z)。ツールバー・タブ・ステータスバーが隠れ、ノートだけが残ります。ウィンドウの大きさは変わりません。画面いっぱいにしたいときは 全画面表示F11、macOS: Ctrl + Cmd + F)を使います。タイトルバーもタスクバーも隠れ、もう一度押すと元の大きさに戻ります。Zen モードと組み合わせると、画面全体にノートだけが残ります。どちらもツールバー右側のアイコン(円が Zen モード、四隅が全画面)から切り替えられます。Zen モードの解除は Esc か、もう一度 Shift + F11 です。

Zen モード。ツールバー、タブ、ステータスバーが隠れ、ノートだけが表示されている
Zen モード:ツールバー・タブ・ステータスバーを隠して、ノートだけを表示

ステータスバーの各表示は、次の ステータスバーの見かた で説明しています。

ステータスバーの見かた

ひとことで: 画面の一番下の帯です。カーソル位置や文字数のほか、関連ノートのピル、Git同期、各機能のON/OFFが並びます。
ステータスバーを拡大した画像。カーソル位置、文字数、関連ノートのピル、Git同期、アクション、予測、自動保存、文字コードに番号が付いている
ステータスバー(2倍に拡大)。日本語UIでは、Git同期とアクションの間に、番号のないIMEバッジ(日本語入力の変換)も並びます
  1. カーソル位置 行と列
  2. 文字数 ノート全体の文字数
  3. 関連ノートのピル 最大2つ
  4. Git 同期 スクラップフォルダの状態。クリックで同期
  5. アクション アクション候補(Quick Actions)の ON / 手動 / OFF。クリックで切り替え
  6. 予測 ゴーストテキストの ON / OFF。クリックで切り替え
  7. 自動保存 ON / OFF。クリックで切り替え
  8. 文字コード クリックで UTF-8 / Shift_JIS を切り替え
位置 表示
カーソルの行・列、文字数、選択の長さ(文字を選んでいるときだけ)
中央 関連ノートのピル、LLM・処理中の表示、各種メッセージ
実行中タスクのバッジ(クリックでタスクパネル、Alt + T)、Git同期(クリックで同期)、IME、アクション(クリックで ON → 手動 → OFF)、予測(ゴーストテキスト)、自動保存、文字コード(クリックで切り替え)

関連ノートのピルを出すには

  1. フォルダを開くCtrl + Shift + O でノートのフォルダを開きます。次回起動時も覚えています
  2. そのまま書き続ける入力を止めて1.2秒ほど待ちます
  3. ピルが出るいまの内容に近いノートが、最大2つ表示されます
  4. クリックして開く新しいタブで開きます。マウスを乗せると、タイトル・パス・冒頭が見えます

フォルダを開いていないとき、または近いノートがないときは、ピルは出ません。

制限・詳しい仕様(探索の範囲とスコア)
  • フォルダを開くと「ワークスペース読込完了: N 件のメモ」と表示されます。
  • 探索するのは .md.markdown.txt だけで、深さは3階層までです。
  • . で始まるフォルダ、node_modulesvendorappdata$recycle.binsystem volume informationwindows は飛ばします。
  • 300ノート、1500ファイル、2.5秒のどれかに達すると探索を打ち切ります。とても大きなフォルダでは、後ろのノートが対象に入らないことがあります(通知はありません)。
  • 各ノートは、最初の見出し(なければファイル名)をタイトル、最初の1行をスニペットとして持ちます。
  • 入力が止まって1.2秒後に、カーソルのある行と、カーソル前の250文字から、キーワード(2文字以上、最大8個)を取り出します。
  • ほかの全ノートに点数を付け、上位2件をピルにします。
一致した場所点数
タイトル3
スニペット(冒頭の1行)1.5
パス1

インストール & 起動

ひとことで: 単一バイナリで、インストーラーは不要です。コマンドを1行実行するだけで使えます。 Windows x64 macOS 10.15 以降
Windows (winget)
winget install youshinh.md-memo
  • Microsoft Edge WebView2 ランタイムが必要です(Windows 11 には標準で入っています)
  • ランタイムがないと MD-Memo は起動できません
macOS (Homebrew)
brew install --cask youshinh/tap/md-memo
  • macOS 10.15 以降
  • 初回だけ、下の「初回起動について」の操作が必要です
macOS初回起動について

配布物はアドホック署名のみでApple公証を受けていないため、MD-Memo.app は初回にGatekeeperにブロックされます。Finderでアプリを右クリック(Controlクリック)して「開く」を選ぶか、xattr -dr com.apple.quarantine "MD-Memo.app" を一度実行してください。

制限・詳しい仕様(ほかの入手方法・アップデートの確認)
  • zip で入れる: Releases ページ から zip をダウンロードして、任意のフォルダに展開します。
  • ユニバーサルバイナリ: 次回リリースからmacOSビルドはユニバーサルバイナリになり、Apple SiliconとIntel Macの両方に対応します。
  • Macがなくても試せます: このリポジトリへのプッシュのたびに、GitHub上のmacOSランナーが MD-Memo.app をビルドします。Actions タブを開く(または CI ワークフローを Run workflow で手動実行する)→ 最新の CI 実行を開く → Artifactsから md-memo-macos-<commit-sha> をダウンロードします。これもアドホック署名なので、上記と同じ初回起動の操作が必要です。
  • アップデートの確認: 起動してしばらくすると、GitHub に新しいリリースがないかを確認します(api.github.com への1回のリクエストのみで、ノートの内容は送信されません)。新しいバージョンがあると、ヘルプ(?)ボタンに小さなバッジが表示されます。

トレイ常駐と瞬時召喚 (Ctrl+Alt+M)

ひとことで: ウィンドウを閉じても MD-Memo は終了せず、ホットキーで瞬時に呼び戻せます。 Ctrl + Alt + M
Windows Ctrl + Alt + M
  • 右上の閉じるボタン(✕)を押しても終了せず、システムトレイに常駐します
  • 消費メモリはGCにより、わずか5〜15MBに圧縮されます
  • 完全に終了するには、トレイアイコンから終了します
macOS Option + Cmd + M
  • メニューバーの常駐アイコンはなく、ウィンドウを閉じるとDockに残ります(メモリは同様に圧縮されます)
  • Dockアイコンのクリック、またはホットキーで元に戻ります
  • 終了するには Cmd+Q

ホットキーを押すと、どのアプリを開いていても最前面に瞬時に現れ、カーソルも直前の位置に復帰します。

ホットキーは呼び出し専用です

もう一度押しても、ウィンドウは隠れません。バックグラウンドへ戻すには、ウィンドウを閉じてください。

IME Guardian:コード入力時の全角誤爆の完全排除

ひとことで: 日本語IMEをオンにしたままコードやURLを打っても、全角アルファベットが混ざらないようにします。

インラインコード(`...`)やコードブロック(```)、URLの入力で全角の catfind が混ざり、実行エラーになるストレスをなくします。

  • レキシカルスコープ保護: コードブロック内では自動的に半角英数モードへと誘導されます(入力遅延わずか11µs)。
  • 直接入力のローマ字自動修復: 半角直接入力モードで「konnitiha」と打ってしまった場合、自動でひらがな変換へ救済します。

デイリースクラップ思想(日報メモ)

ひとことで: ファイル名は考えなくて大丈夫です。日付ごとのスクラップファイルが自動で作られます。

MD-Memoは自動的に日付ごとのスクラップファイル(scraps/YYYY-MM-DD.md)を作成します。

後述の Ctrl+Shift+F を使えば、過去数年分のデイリースクラップをミリ秒単位で全文検索できます。

02 機能別 操作ガイド

ひとことで: 機能は「書く」「実行する」「任せる」の3つの動詞で整理され、入口はそれぞれひとつだけです。迷ったら Ctrl + J でアクション候補を出します。

迷ったらこの表

やりたいこと 入口 どんな機能か
書く
選択した文を直したい・書いてほしい
Ctrl + L
(macOS: Cmd + L
内蔵のLLMが数秒で答えます。選択範囲(なければ現在の行)が対象で、答えは対象の下に入ります。元の文は書き換わりません。
実行する
コマンドを走らせたい
コマンドバー
Ctrl + E
(macOS: Cmd + E
選択したテキストをシェルコマンドに通し、その出力を下に挿入します(設定で置き換えに変えられます)。待ち時間はコマンド次第で、ほぼ即座です。Tab で AI モードに切り替えると、AIがコマンドを書いてくれます。
任せる・おまかせ
調査や実装をまるごと頼みたい。書いた1行の意図をくんでほしい
自動セレクター
Ctrl + Enter
(macOS: Cmd + Enter
1行書いて押すと、内容を見て、LLM への指示・エージェントへの依頼・コマンドに振り分けます。エージェント(Claude Code、Codex、Hermes、Antigravity など)は、バックグラウンドで数分かけて作業します。結果は指示行の下に入ります。ノートに {{ 指示 }} と書いて実行する従来の方法も使えます。
何をすべきか分からない Ctrl + J
(macOS: Cmd + J
いま書いている内容に合う次の一手を最大3件提案します(アクション候補)。各カードは「書く」「実行」「任せる」のいずれかに対応します。

3つの動詞の見分け方

書く Ctrl + L
  • 対象は「いま目の前にある文章」
  • 選択してから Ctrl + L(選択がなければ現在の行)
  • 数秒で、対象の下に答えが入ります
実行する Ctrl + E
  • 「コマンドの結果が欲しい」とき
  • AIを待つ必要はありません
  • ほぼ即座に返ります
任せる Ctrl + Enter
  • 自分では手を動かしたくない調べ物・実装や、書いた1行の意図をくんでほしいとき
  • 行の内容から、LLM・エージェント・コマンドへ自動で振り分けます
  • エージェントは数分かかります。その間もノートの編集を続けられます

書く|AIに質問 (Ctrl+L)

ひとことで: 選んだ文(なければ現在の行)についてAIに指示を出すと、答えが対象の下に入ります。元の文は書き換わりません。 Ctrl + L LLMの設定が必要
Ctrl+Lで開いた「AIに質問」バー。選択した行の終わりのすぐ下に、指示を入力したバーが表示され、その下に「選択範囲: 34文字」という対象の表示がある
Ctrl + L:選んだ行の終わりに質問バーが開き、指示を入力したところ
  1. 選択した文 指示の対象です。選ばなければ現在の行、空行ならメモ全体が対象になります
  2. 質問バー 対象にしてほしいことを入力します
  3. 対象の表示 AIが読む範囲です。「選択範囲: N文字」「現在の行」「メモ全体」のどれかが出ます
  4. 実行ボタン Enter でも実行、Esc で閉じます。答えは対象の下に入ります
  1. 文を選ぶ直したい・訳したい・要約したい部分を選びます。選ばなければ、カーソルのある行が対象です
  2. Ctrl + L を押して指示を書くカーソルのすぐ下に、質問バーが出ます(macOS: Cmd + L
  3. Enter で実行対象の下に答えが入ります。元の文はそのまま残ります
  4. 待てないときは取り消す依頼はタスクパネル(Alt + T)に並びます。ここから中断できます

指示の例

  • 「このエラーメッセージの原因と修正法を教えて」
  • 「日本語に自然に翻訳して」
  • 「箇条書きの議事録に要約して」

ツールバーのAIボタン、右クリックの「AIに質問...」、コマンドパレットの「AIに質問」でも、同じバーが開きます。

普通の文章の行で Ctrl + Enter を押しても、同じバーが開きます。このときヒントは「指示は [[ @llm ... ]] としてメモに残ります」に変わり、書いた指示が対象の下に残って、答えはその下の結果ブロックに入ります。詳しくは 自動セレクター をご覧ください。

よく使う指示はコマンドパレットにCtrl + Shift + P)。次の3つを選ぶと、質問バーに定型の指示が入った状態で開きます。

  • UNIX Pipe: 文章推敲・リファクタ — 選択範囲を簡潔で論理的な文章に整えます。
  • UNIX Pipe: 箇条書き要約 — 要点を構造化されたMarkdownの箇条書きにまとめます。
  • UNIX Pipe: 未完了タスク抽出 — 文章からTODOを拾い出し - [ ] 形式のチェックリストにします。
制限・詳しい仕様(対象・答えの入る場所・エラー・取り消し)
  • 対象の決まり方: 選択範囲があればそれ、なければカーソルのある行、行が空ならメモ全体の順です。ノートが空のときは「対象テキストなし(自由な質問)」と表示され、入力した指示だけがAIに送られます。
  • 答えの入る場所: 対象の最後の行の下に、空行を1つずつはさんで入ります。空行にカーソルがあるときは、その空行に入ります。選択範囲や行そのものは書き換わりません。
  • LLM が未設定のとき: 質問バーは開きません。「LLMが未設定です(設定 → AIモデル)」と出て、ノートは変わりません。モデルか接続先が空のとき、または Gemini・OpenAI などのクラウドサービスで API キーが空のときです(Ollama などのローカルは、キーなしで使えます)。
  • 待っている間: ノートに [AI 生成中: 指示の先頭20文字...] という行が入り、答えが届くと、その行が答えに置き換わります。
  • 失敗したとき: 答えの代わりに、[LLMエラー: 原因] という1行が入ります。原因は、改行を除いて300文字までに縮められます。
  • 取り消し: 依頼は、タスクパネル(Alt + T)にエージェント名「LLM」で並びます。ここで取り消すと、待機中の行が消えてノートは元の状態に戻り、「LLMへの依頼を中断しました」と表示されます。AIへの通信そのものは止められないので、あとから届いた答えは捨てられます。
  • 使うモデル: 設定 → AIモデル の、テキストLLMです。
  • 日本語入力(IME): 変換を確定する Enter では、送信されません。確定したあとにもう一度 Enter を押すと実行します。
  • 回答のフェンスの扱い: モデルが回答全体を1つの ```markdown / ```md フェンスで囲んで返してきた場合、MD-Memoは挿入前にそのフェンスを自動で外します。コードブロックで囲むのではなく、Markdownそのものが挿入されるようにするためです。実際のコード回答(```python など)や、他の文章の中にフェンスコードブロックを含むだけの回答は、そのまま挿入されます。
  • 以前のキー: 以前のバージョンで、この機能を Ctrl + K で使っていた場合は、設定を読み込むときに Ctrl + L へ自動で移り、お知らせが1回だけ出ます(別画面だったプロンプト入力は、この質問バーに統合されました)。

書く|ゴーストテキスト(予測入力)

ひとことで: 「書く」の受け身版です。タイピングを止めると、続きが薄い文字で提案されます。呼び出す必要はありません。 Tab で採用 LLMの設定が必要
チェックリストの新しい項目を書いている途中で、カーソルの後ろに灰色のゴーストテキストが表示されている
チェックリストの新しい項目を書いているとき、続きが灰色の文字で提案されたところ
  1. カーソル ここまでに入力した内容です
  2. ゴーストテキスト 灰色の予測です。Tab(または →)で採用、Ctrl + → で1単語だけ採用します
Tab
全文採用
提案をまるごと入力します
Ctrl
1単語だけ採用
macOS: Option + →
任意のキー
無視して続行
そのまま打ち続けると、静かに消えます
制限・詳しい仕様
  • 提案を出すのは、ローカルLLM(Ollama / Gemma 4)またはクラウドAPIです。設定は 設定 → AIモデル の「入力予測」にあります。
  • 表示までの待機時間の既定は500msです。設定画面では200〜2000msですが、実際の下限は300msです。
  • ステータスバーの「予測」バッジをクリックすると、ON / OFF を切り替えられます。

書く|AI 文章校正・誤字脱字修正 (Alt+C)

ひとことで: 文章を選んで押すだけ。指示を書かずに、誤字脱字や言い回しだけを直します。 Alt + C LLMの設定が必要
  1. 文章を選ぶ議事録や報告文など、仕上げたい部分を選びます
  2. Alt + C を押すmacOS: Cmd + Shift + C。プロンプトの入力は要りません

内容を書き換えるのではなく整えるための機能なので、議事録や報告文の仕上げに向いています。オン / オフは 設定 → 一般 の「AI入力間違い・誤字脱字の自動補正 (Alt+C)」で切り替えられます。

書く|画像貼り付け OCR 文字起こし (Ctrl+V)

ひとことで: 画像をコピーして貼り付けるだけで、画像の中のテキスト・表・コードがMarkdownになります。 Ctrl + V APIキー必要
  1. 画像をコピーするスクリーンショットや設計図の画像をクリップボードへ
  2. MD-Memoで Ctrl + VGemini Vision OCR が起動します
  3. Markdownが貼られる画像内のテキスト・表・コードが、構造化されたMarkdownとして入ります
制限・詳しい仕様(必要な設定)
  • 設定 → AIモデル → 画像解析 で、Geminiなどの画像モデルとAPIキーを設定します。
  • 「画像ペースト(Ctrl+V)時に自動で画像マークダウン化 (Vision OCR) を実行」のスイッチが必要です(既定でオン)。
  • クリップボードに画像しかないときだけ働きます。テキストと画像の両方があるときは、テキストが貼り付けられます。
  • ローカルのビジョンモデル(OllamaやLM Studio)なら、APIキーなしでもOCRできます。
  • OCRを使わず画像のまま貼りたいときは、そのまま貼るCtrl + Shift + V)で assets に保存します。スイッチがオフのとき、または画像モデルのAPIキーが未設定のときは、Ctrl + V でも、同じように assets に保存してリンクを貼ります(理由がトーストに出ます)。

書く|スマート貼り付け (Ctrl+V / Ctrl+Shift+V)

ひとことで: Ctrl + V は、Webページ・ワード・Excelの内容も、画像も、Markdownにして貼ります。加工せずそのまま貼るなら Ctrl + Shift + V です。 HTMLの変換はAPIキー不要
HTMLの表をコピーして Ctrl+V で貼り付けた結果。Markdownの表になり、ステータスバーに変換のトーストが出ている
HTMLの表をコピーして Ctrl + V で貼り付けたところ
  1. 貼り付けた表 HTMLの表が、Markdownの表に変換されています
  2. トースト ステータスバーに「Markdown に変換して貼り付けました」と出ます
Ctrl + V Markdownにして貼る
  • 構造のあるHTML: Webページ・Word・Google Docs・Excelの表や見出し、リスト、リンクを、Markdownに変換して貼ります。トーストに「Markdown に変換して貼り付けました」と出ます
  • 構造のない内容(エディタやターミナルからのコードとログ、1セルだけのコピー)は、そのまま貼ります
  • 画像だけのとき: 画像OCR のビジョンモデルがMarkdown / Mermaidに文字起こしします
  • OCRには、「貼り付けた画像を自動で文字起こしする」設定とAPIキーが必要です(設定 → AIモデル → 画像解析)。どちらかが足りないときは、OCRに送らず、Ctrl + Shift + V と同じく画像を assets に保存してリンクを貼ります(Mobile Drop の写真と同じ扱い)
Ctrl + Shift + V そのまま貼る
  • テキスト: 装飾を取り除いたプレーンテキストで貼ります。HTMLの変換はしません
  • 画像だけのとき: ./assets/YYYY-MM-DD-HHmmss.png として保存し、カーソル位置に ![image](./assets/...) を挿入します。OCRには送られません
  • ExcelやWordのように、テキストと画像が両方あるときは、テキストが貼られて画像は無視されます
制限・詳しい仕様

変換されるもの(内蔵コンバータ。外部依存なし)

  • 見出し(h1〜h6)、段落、改行、水平線
  • 太字・斜体・取り消し線、インラインコード、言語付きのフェンスコードブロック
  • 入れ子の引用、start を保持した入れ子のリスト、タスクリストのチェックボックス
  • タイトル付きリンク、画像
  • 列揃えを保ったGFMテーブル(セル内の | はエスケープ)
  • Google Docs特有のラッパー構造にも対応します

安全のため取り除かれるもの: <script><style><iframe><svg> の中身、javascript:data: のリンク、data: 画像。

画像の保存名: 拡張子は実際の画像形式に合わせて .png / .jpg / .gif / .webp になり、名前が重複すると -2-3… が付きます。

./assets/ の保存先: メモが保存済みならそのメモの隣、そうでなければ現在のワークスペースフォルダ、ワークスペースも無ければアプリのデータフォルダです。最後のケースでは、挿入されるリンクは相対リンクではなく、絶対パスの file:/// リンクになります。

変換の対象: 表・見出し・リスト・リンク・画像・引用・区切り線・太字や斜体などが含まれるHTMLだけを変換します。段落と改行だけのHTML、VS Code のエディタからのコピー、1セルだけのExcelのコピーは、変換せずにそのまま貼ります。

役割を元に戻す: 設定 → 一般 の「Ctrl+V で Web・Word・Excel の内容を Markdown にして貼る」をオフにすると、以前の割り当てになります。Ctrl + V がプレーンテキスト、Ctrl + Shift + V がHTMLの変換です(このとき、貼り付けイベントにHTMLが含まれないアプリでは、非同期クリップボードAPIにフォールバックします。組み込みブラウザが、初回のみ独自の許可プロンプトを表示することがあります)。

トースト: 「Markdown に変換して貼り付けました」(変換成功時)、または「画像を assets に保存しました」(画像のみのクリップボードを ./assets/ に保存したとき)。

Ctrl + Shift + V は固定のキーで、設定 → ショートカット では変更できません。以前はプレビューを横に開くコマンドでしたが、そちらは Ctrl + Alt + V(macOS: Cmd + Option + V)に変わりました。

書く|音声入力 (Ctrl+Shift+R)

ひとことで: キーを押して話すと、カーソル位置に文字起こしが入ります。 Ctrl + Shift + R Gemini の APIキーが必要
音声入力の録音中にカーソル位置へ挿入された「音声入力中」のマーカー
録音中:カーソル位置にマーカーが入ります
  1. 録音中のマーカー 録音が終わると、文字起こしの結果に置き換わります(Esc で録音を破棄)。マーカーの文字は、UIの言語にかかわらず日本語です
  1. 録音を始めるCtrl + Shift + R(macOS: Cmd + Shift + R)。カーソル位置に ⦅音声入力中... [id:xxxx]⦆ が入ります。録音中も、別の場所をクリックして入力を続けられます
  2. 止める画面左下の 停止 ボタンをクリック、もう一度 Ctrl + Shift + R、または5秒の無音(1〜30秒で変更可)で自動停止します。Esc なら破棄で、マーカーは消えて何も送信されません
  3. 結果を待つマーカーが ⦅文字起こし中... [id:xxxx]⦆ に変わり、終わるとテキストに置き換わります
録音中の表示。赤い点と経過時間、停止ボタン、「ESC で破棄」の案内が並んでいる
録音中:画面の左下に、この表示が出ます
  1. 録音中の印 赤い点と、録音してからの経過時間です
  2. 停止ボタン クリックすると録音を止めて、文字起こしを始めます(ショートカットをもう一度押すのと同じです)
  3. ESC で破棄 Esc を押すと、録音を破棄します

録音を始める4つの方法

CtrlShiftR
ショートカット
設定 → ショートカット の「音声入力」で変更できます(空にすると無効)
ツールバー
マイクボタン
Mobile Drop の右にあります。録音中は押された状態で表示されます
右クリック
「音声入力」
右クリックメニューの項目です
CtrlShiftP
コマンドパレット
「音声入力」を選びます

文字起こしに失敗したとき

録音は消えません。音声はアプリのデータフォルダの voice_cache に保存され、マーカーが次のように変わります。

⦅文字起こし失敗: [再試行(id:xxxx)] [音声保存] [破棄]⦆
文字起こしに失敗したときのマーカー。再試行、音声保存、破棄の3つの操作が並んでいる
失敗したときに残るマーカー。かっこの中をクリックして選びます
  1. [再試行] 保存した音声を、もう一度文字起こしに送ります
  2. [音声保存] 音声をノートの ./assets/ に移し、[audio](...) リンクを挿入します
  3. [破棄] 保存した音声を削除し、マーカーを消します

このリカバリは、アプリを再起動した後でも使えます(保存済みの音声とマーカーのidは再起動後も残ります)。

失敗の理由が 話し声が検出されませんでした のときは、APIは動いていて、録音に話し声がほとんど入っていません。マイクの選択と音量(Windows の設定 → システム → サウンド)を確認してください。応答がまったく返らないときは、待ち時間(既定の30秒+20秒)を過ぎるとマーカーが [再試行] の形に変わり、アプリを閉じている間に応答が途切れた古い「文字起こし中」の表示は、ノートをクリックすると片付きます。

設定(設定 → AIモデル の「音声入力 / Voice input」。画像OCR(ビジョン)の設定のすぐ下にあります)

項目 既定 説明
音声モデル gemini-3.5-transcribe 候補は gemini-3.5-transcribegemini-2.5-flashgemini-flash-lite-latest
API 形式 自動 自動 / Interactions API / generateContent。自動は、モデル名に「transcribe」を含めば Interactions API、それ以外は generateContent を使います。
言語コード 空欄 BCP-47 をカンマ区切りで指定します(例 ja-JP, en-US)。空欄なら自動判定で、言語の混在にも対応します。
モード スマート スマート=フィラーを除いて、読みやすく整形。逐語=そのまま書き起こします。
カスタム語彙 空欄 1行に1語(人名・専門用語)。最大1000語ですが、100語程度までがいちばん効きます。
無音タイムアウト (秒) 5 1〜30。この秒数だけ無音が続くと自動で停止します。
文字起こしプロンプト 既定の指示文 generateContent 形式のモデルでだけ使われます。
APIキー / Base URL 空欄 空欄なら、画像OCR(ビジョン)の設定を使います。専用の入力欄はありません。
メッセージとエラー

状況に応じたメッセージが、ステータスバーに6〜9秒ほど表示されます。

メッセージ 意味と対処
マイクを準備中... キーを押した直後に表示されます。
マイクの許可待ちです。... 5秒たっても応答がないときに表示されます。初回はWebView2が独自の許可の確認を出すので「許可」を選びます。MD-Memoが無断でマイクを許可することはありません。
マイクの使用が許可されていません。... Windows の設定 → プライバシーとセキュリティ → マイク で、デスクトップアプリのアクセスを許可します。
マイクが見つかりません マイクが接続されていません。
マイクを開けません。... ほかのアプリがマイクを使用中かもしれません。
マイクを使用できませんでした 上のどれにも当てはまらない場合の汎用メッセージです。
音声入力はエディタ表示で使えます レンダリングされたプレビュー表示中に押したときに出ます。エディタ表示に戻してください。
制限・詳しい仕様(モデル・プライバシー・必要なもの)
  • モデル: 既定は gemini-3.5-transcribe です(以前は gemini-2.5-flash)。Geminiモデル限定で、オフラインやGemini以外のモデルは選べません。
  • 呼び出し方: Google の Gemini 3.5 Transcribe を Interactions API(POST {base}/v1beta/interactions、ヘッダー x-goog-api-key)で呼びます。gemini-2.5-flash などの古いモデルは、プロンプト付きの generateContent 形式で動きます。
  • ライブ版は使えません: gemini-3.5-transcribe-live はストリーミング(Live API)版で、録音した音声には使えません(指定すると、その旨のエラーが出ます)。
  • プライバシー: MD-Memoは常に store: false を送ります。Google側に録音や文字起こしは保存されません。
  • キー: APIキーとBase URLが空なら、画像OCR(ビジョン)の設定を使います。設定ファイルには voice.apiKey / voice.baseUrl というキーもありますが、設定画面に入力欄はありません。
  • 日本語IME: IMEをオンにしたままでも、ショートカットは使えます。
  • マイクの許可: 許可の確認を出すのはOSではなく組み込みブラウザ(WebView2)自身で、初回録音時に一度だけです。
  • macOS: マイク使用の説明文は組み込み済みですが、macOSでの動作はまだ十分に検証されていません。

実行する|コマンドバー: CLI モード (Ctrl+E)

ひとことで: 選んだテキストをローカルのUNIX系コマンドに流し込み、その標準出力を直下に挿入します(選んだテキストは残ります)。 Ctrl + E キー不要
Ctrl+Eで開いたコマンドバー。CLIモードで sort -u が入力されている
Ctrl + E:CLI モードで、コマンド(sort -u)を入力したところ
  1. モードのバッジ 「CLI」と出ています。クリックするか Tab を押すと AI CLI モードに切り替わります。選んだモードは、次に開くときも使われます
  2. コマンド欄 シェルコマンドを入力するか、ドロップダウンから、履歴やプリセット(sort -ujq .git status など)を選びます
  3. 実行(Enter) 選択範囲(選択がなければノート全体)をコマンドに送り、出力が返ってきます
  1. テキストを選ぶ選ばなければ、ノート全体が対象になります
  2. Ctrl + E でバーを開く入力欄に、よく使うコマンドの候補が並びます。AI モードで開いたときは、Tab で CLI モードに切り替えます
  3. コマンドを入力して Enter選んだテキストの下に、コマンドの出力が入ります(選んだテキストは残ります)。Esc で閉じます
ひとつのバー、2つのモード

Ctrl + E で開くのは、ひとつのコマンドバーです。前回使ったモードで開き、Tab か、バー左端のバッジ(CLI / AI CLI)のクリックで、いつでも切り替えられます。コマンドを自分で書けるなら CLI モード、書き方が分からないなら AI モード です。

モードごとに直接開くキー(「コマンドバー: コマンド実行モード」「コマンドバー: AIがコマンドを作るモード」)は、既定では割り当てられていません。設定 → ショートカット の「コマンドバー」グループで割り当てられます。

コマンドの例

  • jq . : JSONの整形・インデント
  • sort -u : 重複行を排除してアルファベット順に並び替え
  • tr a-z A-Z : 大文字に一括変換
  • duckdb -box : SQLをインライン実行して表形式で出力
制限・詳しい仕様
  • 結果の扱い: 設定 → 連携 の「コマンド(実行する)」にある「コマンドの出力の入れ方」と「実行結果を新しいタブで開く」で決まります。選んだテキストがあるとき、出力は既定で、その最後の行の下に入り、選んだテキストは残ります。「選択範囲を置き換える」にすると、従来のフィルタのように、選んだテキストが出力に置き換わります。「実行結果を新しいタブで開く」がオン(既定)のときは、結果を新しいタブでも開きます。オフでは新しいタブを開かず、選択がなければ出力をノートの末尾に加えます(「置き換える」なら、ノート全体が出力に置き換わります)。
  • 出力が空のとき: コマンドが成功しても何も出力しなかった場合、結果のタブに「(no output)」と表示されます。
  • 作業ディレクトリ: コマンドは、MD-Memoアプリ自身の作業ディレクトリで実行されます。
  • プリセット(入力欄の候補): 履歴が先頭に並び、続けて、agents.yaml の snippets: に書いた自作の command のひな形、固定のフィルタ(sortsort -ujq .trwc -lduckdb -box など)、組み込みの command のひな形の順です。ひな形は、そのまま実行できるもの(${selection}$0 などのプレースホルダを含まないもの)だけが並びます。組み込みは git statusgit diff --stat、現在の日時、ファイル一覧などで、実行中の OS に合う版だけです。詳しくは 自動セレクター の「ひな形」をご覧ください。

実行する|コマンドバー: AI モード (Ctrl+ETab)

ひとことで: やりたいことを日本語のまま書くと、AIがシェルコマンドを作ってくれます。同じコマンドバーの AI モードです。 Ctrl + ETab LLMの設定が必要
Ctrl+E のあと Tab で切り替えた、AI CLIモードのコマンドバー。やりたいことを日本語で入力している
Ctrl + E → Tab:AI CLI モードで、やりたいことを日本語で入力したところ
  1. モードのバッジ 「AI CLI」と出ています。クリックするか Tab を押すと、通常の CLI モードに戻ります
  2. 依頼欄 コマンドを書く代わりに、やりたいことを普通の言葉で書きます
  3. 生成(Enter) AIがコマンドを欄に書き込むので、内容を確認します。もう一度 Enter で実行します
  1. Ctrl + E でバーを開き、Tab で AI モードにするバー左端のバッジが AI CLI になります。前回 AI モードだったときは、最初からこのモードで開きます
  2. やりたいことを日本語で書く例:「今日更新されたファイルを探して」「ポート8080を使っているプロセスを終了して」
  3. Enter で生成AIが対応するシェルコマンドを作り、バーに入れます
  4. 内容を確認して Enter で実行実行前に必ず内容を読んでください
実行前の安全性チェック

生成されたコマンドは、実行前に安全性チェックを通ります。システムを破壊しうるコマンドは実行が拒否され、注意が必要なコマンドには警告が表示されます。

任せる|自動セレクター (Ctrl+Enter)

ひとことで: 1行書いて Ctrl + Enter。内容を見て、LLM への指示・エージェントへの依頼・コマンドに振り分け、結果を指示行の下に入れます。指示は消えません。 LLMの設定が必要 エージェントCLIが別途必要

4つのキーの役割(macOS では Ctrl を Cmd に読み替えます)

CtrlL
AIに質問
聞く:内蔵LLMに質問。答えは対象の下に入ります
CtrlE
コマンドバー
通す:選んだテキストをコマンドに通し、出力を下に挿入します
CtrlEnter
自動セレクター
任せる・おまかせ:行の内容を見て振り分け、結果を指示行の下に入れます
CtrlJ
アクション候補
提案:次の一手を最大3件、カードで示します
1行書く依頼やコマンドを、ふつうに書きます
Ctrl + Enter内容を見て、LLM・エージェント・コマンドに振り分けます
結果が下に入る指示行は残り、答えは下の結果ブロックに入ります

行き先は、ネットワークを使わない決まりごとで判定します。外れることもありますが、迷うときは質問バーが開くだけで、ノートは勝手に変わりません。

Ctrl+Enterで実行したあとのノート。指示の行が [[ @llm ... ]] に変わり、その下に、2つのコメント行ではさまれた英訳の結果が入っている
Ctrl + Enter:指示の行が [[ @llm ... ]] に変わり、答えが下の結果ブロックに入ったところ
  1. 指示の行 [[ @llm ... ]] に書き換わり、そのまま残ります
  2. 結果ブロックの始まり md-memo:res のコメント行です。ノートの中の文字として残ります
  3. 答え 2つのコメント行の間に入ります
  4. 結果ブロックの終わり 閉じるコメント行です
  1. 1行で書く「上のチェックリストを英語に翻訳して」のような依頼や、git status のようなコマンドを、ふつうに書きます
  2. Ctrl + Enter を押すLLM への指示なら、すぐ実行します。エージェントやコマンドなら、行を書き換えて止まります(macOS: Cmd + Enter
  3. 止まったら、もう一度 Ctrl + Enter書き換えた行が実行されます(行の右の 実行 ボタンでも同じです)。やめるときは Ctrl + Z で書き換えを取り消します
  4. 結果を受け取る指示行の下に結果ブロックが入ります。指示行でもう一度 Ctrl + Enter を押すと、結果を作り直せます
  5. 待てないときは中断するタスクパネル(Alt + T)の「中断」で、実行中の目印が消えます。書き換えた指示行は、そのまま残ります

エージェントやコマンドは、書き換えたところで止まります。もう一度 Ctrl + Enter で実行します。設定で、止めずにすぐ実行することもできます(設定 → 連携 の「自動セレクター」)。

「テストを実行して」の行が {{ @claude-code テストを実行して }} に書き換わり、行の右に「実行」ボタンが出ている。画面下のステータスバーに、もう一度 Ctrl+Enter で実行する案内が出ている
エージェントへの依頼に合う行は、書き換えたところで止まります
  1. 書き換わった行 {{ @claude-code ... }} になりました。まだ実行していません
  2. 実行ボタン もう一度 Ctrl + Enter を押すのと同じです
  3. メッセージ 「エージェント依頼に書き換えました。Ctrl+Enter で実行、Ctrl+Z で取り消し」と出ています

普通の文章は、質問バーに回します。指示に見えない行では、質問バーが開きます。書いた指示は、対象の下に [[ @llm ... ]] として残り、すぐ実行されます。対象の行そのものは変わりません。

普通の文章の行で Ctrl+Enter を押すと開く質問バー。「もう少し親しみやすい文体に書き直して」と入力されていて、対象の表示は「現在の行」、ヒントは「指示は [[ @llm ... ]] としてメモに残ります」
普通の文章の行で Ctrl + Enter:質問バーが開き、指示を入力したところ
  1. 対象の行 指示の対象です。選択がなければ、カーソルのある行です
  2. 質問バー Ctrl + L と同じバーです。AIにしてほしいことを書いて、Enter で実行します
  3. 対象の表示 「現在の行」と出ています。選択したときは「選択範囲: N文字」です
  4. ヒント 書いた指示は、[[ @llm ... ]] としてノートに残ります
従来の {{ ... }}
  • 結果が、指示ごと置き換わります
  • 元に戻すのは、結果が入った直後の EscCtrl + Z
  • プロファイル(code: など)と @skill は、こちらのままです
新しい記法 [[ ]] / {{ @エージェント }}
  • 指示は、そのまま残ります
  • 結果は、指示行の下の結果ブロックに入ります
  • もう一度実行すると、結果ブロックだけが置き換わります

ひな形(スニペット) よく使う指示やコマンドの型を、ひな形として挿入できます。入口は、コマンドパレットの「タスクのひな形を挿入」、{{ を打ったときのクイックセレクター、;sum のような短縮語 + Tab の3つです。自作もできます(下の「ひな形」)。

コマンドパレットの「タスクのひな形を挿入」で開いた一覧。LLM や AGENT などの種類のタグと名前、本文の1行プレビューが並んでいる
コマンドパレット → タスクのひな形を挿入:ひな形の一覧
  1. 見出しとキー ↑↓ で移動、Enter・Tab・1〜9 で挿入、Esc で閉じます
  2. ひな形の1行 数字キー、種類のタグ、名前、本文の1行プレビューが並びます。上から9行は、数字キーで挿入できます
  3. 種類のタグ LLM は内蔵AI、AGENT はエージェント、CMD はコマンド、TEXT はそのまま入るテキストです
  4. 続きの一覧 下にスクロールすると、コマンドとテキストのひな形、agents.yaml に書いた自作のひな形が続きます
記法と結果ブロック(書き方・結果の形・再実行・中止)
記法実行先結果の入る場所
[[ @llm 指示 ]]内蔵LLM(設定 → AIモデル のテキストLLM)指示行の下
[[ $ コマンド ]]シェルコマンド。コマンドバーと同じ安全チェックを通ります。標準入力はありません指示行の下(コードブロック)
{{ @エージェント名 指示 }}agents.yaml のエージェント。名前は、キーか別名(大文字小文字は区別しません)指示行の下
{{ ... }}(従来)従来どおり(プロファイルの {{ }}{{ @skill ... }} を含みます)スロットを結果で置き換え
  • 書き方の決まり: [[ ... ]] は、中身が @llm$ で始まるときだけ記法として扱います。ウィキリンク([[Wiki Link]])には触れません。1つの記法は1行に収めます。- [[ @llm ... ]]> {{ @claude ... }} のように、リストや引用の記号の後ろにも書けます。
  • @名前の探し方: {{ @名前 ... }} の名前は、まずエージェント(キー、別名の順)として探し、どれでもなければ、従来どおりスキル指定として扱います。既定の別名は、claude-codeclaudeccagyantigravitygemini です。hermescodex には、既定の別名がありません。
  • エージェント指名の前提指示: {{ }} プロファイルの「コードブロックだけ返す」という前提の指示は、付きません(調査などが壊れるためです)。指示が空で、そのエージェントが指示を引数に取る(args{instruction} がある)ときは、CLI を起動せず、結果に「指示が空です。{{ @名前 指示 }} の形で書いてください」と入ります。

結果ブロックの形

[[ @llm 英語に翻訳して ]]
<!-- md-memo:res a1b2 -->
結果の本文
<!-- /md-memo:res -->
  • 実行中: 指示行の直下に、1行の目印 <!-- md-memo:run a1b2 --> が入ります。終わると、結果ブロックに置き換わります。a1b2 の部分は、英数字の短い id です。
  • 指示行と結果: 指示行そのものは、実行しても書き換わりません。結果は、前後の空白を落として入ります。ブロックの中に、空行は足されません。
  • コマンドの結果: 出力に含まれるバッククォートの連続より長いフェンスで囲んだ、コードブロックです。失敗したときは、出力・標準エラー・exit code N の行が、同じブロックに入ります。
  • LLM・エージェントの失敗: LLM は [LLMエラー: メッセージ]、エージェントは [エージェント名 エラー: メッセージ] の1行が入ります。メッセージは1行にまとめられます。
  • コメント行: 結果ブロックの前後のコメント行は、ノートの中の普通の文字です。エディタには見えますが、MD-Memo のプレビューでは隠れます。消しても、ほかには影響しません(実行中に消したときは、答えがノートの末尾に追加されます)。
  • 再実行: 実行済みの指示行で Ctrl + Enter を押すと、下の結果ブロックを置き換えます(クラッシュなどで残った目印も同じです)。積み重なりません。実行中に押すと、「このスロットはすでに実行中です」と出ます。
  • 中止: タスクパネル(Alt + T)の「中断」で、実行中の目印が消えます(指示行は残ります)。LLM は提供元に中止を伝えられないので、目印を消し、遅れて届いた答えを捨てる動きです。コマンドとエージェントは、実行を止めます。再実行の途中で中止すると、置き換えた古い結果は戻りません。
  • 文脈(ctx=above): 質問バーで記録した指示の目印には、ctx=above n=行数 が付きます(例: <!-- md-memo:res a1b2 ctx=above n=1 -->)。再実行では、指示行の真上にある、空白でない行(最大 n 行)を、対象のテキストとして再び送ります。間に別の指示行や結果ブロックがあれば、飛び越えます(最大80行・8000文字)。手書きの指示、ひな形から作った指示、行の書き換えで作った指示には付かず、書いた文言だけが送られます。周りの文章を、暗黙に送ることはありません。
  • 結果ブロックの中: カーソルが結果ブロックの中にあるときは、「これは実行結果のブロックです。指示はブロックの外に書いてください。」と出て、何も起きません。結果に {{ }} が含まれていても、実行されません。
判定のしくみ(順番・振り分け・設定がないとき・限界)

Ctrl + Enter を押したときの判断の順番(ネットワークを使わず、押した瞬間に決まります)

  1. 日本語入力の変換を確定する Enter のときは、何もしません。押しっぱなしでも、繰り返しては実行しません。
  2. カーソルが結果ブロックの中なら、「これは実行結果のブロックです。指示はブロックの外に書いてください。」と出して、何もしません。
  3. カーソルの位置に、新しい記法のタスクがあれば、そのタスクだけを実行します。選択があるときは、選択の先頭にあるタスク、なければ選択した行の最初のタスクです。複数行を一度に走らせることはありません。
  4. カーソルが従来の {{ }} 系のスロットの中なら、従来どおり実行します(結果で置き換わります)。
  5. 自動判定がオフ、または行が空白なら、従来の動きです。カーソルより後ろの次のスロット、なければノートの最初のスロットを実行し、どれもなければ「実行できるスロットが見つかりません」と出ます。コードブロックの中では、何も起きません。
  6. 対象は、選択範囲、なければ現在の行です。選択が行の一部だけのとき、選択が複数行のとき、行が指示に見えないとき、迷うときは、質問バーを開きます。行のテキスト全体を選んだときは、選択なしと同じ、その行の判定になります。
  7. 行全体が指示に見えるときは、次の表のとおりに動きます。
判定動き
LLMへの指示行を [[ @llm 行の内容 ]] に書き換えて、すぐ実行します。LLM が未設定なら、ノートに触れず、「LLMが未設定です(設定 → AIモデル)」と出します。
エージェントへの依頼行を {{ @エージェント名 行の内容 }} に書き換えて、止まります。「エージェント依頼に書き換えました。Ctrl+Enter で実行、Ctrl+Z で取り消し」と出ます。エージェント名は、行頭に @名前(別名も可)があればそれ、なければ既定のエージェント(設定 → 連携)です。
コマンド行を [[ $ 行の内容 ]] に書き換えて、止まります。「コマンドに書き換えました。Ctrl+Enter で実行、Ctrl+Z で取り消し」と出ます。実行するときに、安全チェックを通ります。

設定 → 連携 の「自動判定したエージェント/コマンドは実行前に確認する」(既定はオン)をオフにすると、エージェントとコマンドも、書き換えと同時に実行します。

質問バーからの記録: 質問バーで指示を入力して Enter を押すと、対象の下の新しい行に [[ @llm 入力した指示 ]] が書かれて、すぐ実行されます。対象のテキスト自体は変わりません。LLM には、指示と対象のテキストの両方が渡されます。LLM が未設定のときは、バーを開かずにメッセージを出し、ノートは変わりません。

「指示に見える」ものの目安

  • 指示と見なす: 依頼の言い回し(「〜して」「〜してください」「〜教えて」、翻訳・要約・校正 など)、疑問語のある質問、英語の命令形(translate、summarize など)。
  • 指示と見なさない: 見出し、表の行、URL、コードらしい行、ふつうの文、4行以上、約240文字より長い文。質問バーが開きます。
  • 行き先: 翻訳・要約・校正・言い換え・箇条書き・表・アイデアなどは LLM です。実装・リファクタリング・テストの実行・ビルド・コミットや PR などの Git 操作・調査・エラーログ、コードやバグの言葉が重なる修正などは、エージェントです(「テストを実行して」「npm test を実行して」もエージェントです)。git statusls -lacat a.txt | sort のように、既知のコマンド名で始まり引数が付く行は、コマンドです。どれでもなければ LLM です(文字の答えだけで済む、安全側の選び方です)。
  • 行頭の指定が優先: 行頭に @llm@エージェント名(別名も可)、$ があれば、それに従います。
  • コマンドの自動判定: 書き込みや削除をするコマンド(rm> での保存など)は、自動ではコマンドと判定されません。実行したいときは、[[ $ ... ]] と自分で書きます。
  • 外れる例: 「資料は事前に共有してください」のような丁寧な依頼文も、LLM への指示と判定されます。

設定や環境が足りないとき

状況動き
LLM が未設定(モデルか接続先が空。Gemini などのクラウドで API キーが空)「LLMが未設定です(設定 → AIモデル)」と出て、ノートは変わりません。Ollama などのローカルは、キーなしで動きます。
エージェントが見つからない(agents.yaml・PATH)行は書き換わりますが、「エージェント「名前」が見つかりません(agents.yaml と PATH を確認)。書き換え済み、Ctrl+Z で取り消し」という警告が出ます。実行すると、ふつうの起動エラーになります。
コマンドが危険コマンドバーと同じ安全チェックが拒否し、「セキュリティ制限: 理由」と出ます。注意レベルのコマンドは、確認ダイアログが出ます。拒否や取りやめのときは、結果は入りません。
コマンドが終わらないコマンドは30秒で打ち切られ、失敗として扱われます。応答が届かないまま40秒たつと、「コマンドから応答がありませんでした (タイムアウト)」と出ます。
待っている間にノートが変わった・閉じた答えを書けないときは、「ノートが変更されました。もう一度キーを押してください。」と出ます。ノートを閉じたときは、答えを捨てます。

できないこと

  • 判定は決まりごとで、外れることがあります。迷うときは質問バーが開き、ノートは勝手に変わりません。
  • 1つのタスクは1行に収めます。1回の Ctrl + Enter で走るのは、1つのタスクだけです。
  • コマンドに標準入力はありません(選択範囲をコマンドに流したいときは、コマンドバー Ctrl + E を使います)。
  • LLM への通信そのものは止められません(中止は、答えを捨てる動きです)。
ひな形(スニペット)(入口・一覧・プレースホルダ・自作と別名)

入口は3つ

  • {{ のクイックセレクター: {{ を打つと出る候補に、従来のプロファイルとレシピのあと、ひな形が並びます(種類のタグ LLM / AGENT / CMD / TEXT、名前、本文の1行プレビュー)。数字キーの 19 は、先頭の9行に付きます。プロファイルが先に並ぶので、これまでの手の動きは変わりません。EnterTab・数字で挿入、Esc で閉じます。打った {{ は、ひな形に置き換わります。
  • コマンドパレット: 「タスクのひな形を挿入」で、ひな形だけの一覧が、カーソルの位置に開きます(上の図)。
  • 短縮語 + Tab: 行頭か空白の後ろで、;sum のような短縮語を打って Tab を押すと、ひな形に展開します。短縮語が完全に一致するときだけです。それ以外の Tab は、これまでどおりです。

[[ を打っても、何も出ません(ウィキリンクの入力を邪魔しないためです)。command のひな形のうちプレースホルダを含まないものは、コマンドバー Ctrl + E の候補にも出ます。

組み込みのひな形(OS ごとに版があるものは、実行中の OS の版だけが出ます。コマンドは、Windows は PowerShell 版、macOS・Linux は sh 版です)

種類短縮語 と 名前
LLM;sum 要約する / ;en 英語に翻訳 / ;ja 日本語に翻訳 / ;proof 校正する / ;rephrase 言い換える / ;bullets 箇条書きにする / ;table 表にまとめる / ;ideas アイデアを出す
エージェント;research 調査する / ;impl 実装する / ;test テストを実行 / ;review レビューする / ;refactor リファクタリング
コマンド;date 現在の日時 / ;gst Git: 変更状況 / ;gdiff Git: 差分の要約 / ;glog Git: 直近のコミット / ;grep 単語を検索 / ;rg 単語を検索 (ripgrep) / ;wc 行数を数える (ファイル) / ;uniq 重複を除いて並べ替え (ファイル) / ;jq JSON を整形 (jq) / ;big 大きいファイルを探す / ;ls ファイル一覧
テキスト;llm LLM タスク (空) / ;agent エージェントタスク (空) / ;cmd コマンドタスク (空)。空の [[ @llm ]]{{ @既定のエージェント }}[[ $ ]] を、そのまま挿入します

展開するときのプレースホルダ

  • ${selection}: 選択範囲。コマンドパレットから挿入するときに入ります({{ や短縮語から挿入するときは空です)。
  • ${line}: 現在の行(打った語や選択範囲を除いた残り)。
  • ${date}: 今日の日付(YYYY-MM-DD の形)。
  • ${agent}: 既定のエージェント。
  • $0: 展開したあとの、カーソルの位置。
  • 文字どおりの $0${ は、$$0$${ と書きます。
  • 安全: 展開される値は1行にまとめられ、[[ ]]{{ }} を壊しません。コマンドでは、引用符・$;| などが取り除かれます。${selection}${line} は、タスクでは2000文字、コマンドでは300文字までです。

自作のひな形と別名agents.yaml

  • snippets: 項目は idlabelkindllm / agent / command / text)、trigger(任意)、bodyoswin / unix / any。command 用)、agent(kind が agent のときの指名先。省略時は既定のエージェント)です。組み込みと同じ id を書くと差し替え、新しい id は追加になります。
  • trigger: 空白を含まない2〜30文字です。大文字と小文字、全角と半角を区別せず、完全に一致したときだけ展開します。組み込みは ; で始まり、下の例は /weekly です。どちらの書き方も使えます。
  • aliases: エージェントごとに、{{ @cc 指示 }} のような短い名前(別名)を付けられます。名前は、agents のキーか aliases のどれかで、大文字と小文字は区別しません。キーは、別のエージェントの別名より優先されます。書かなくても、claude-codeagy には、既定の別名が付きます。
  • 反映: {{ の一覧、コマンドパレットの一覧、短縮語の展開は、MD-Memo を再起動したあとに新しい内容になります。{{ @別名 ... }} の実行と、コマンドバーの候補は、再起動しなくても新しい内容を使います(実行のときと、バーを開くたびに、agents.yaml を読みます)。設定 → 連携 の「agents.yaml を開く」で開くファイルがなければ、コメントアウトした例と説明が入った雛形が生成されます。
snippets:
  - id: "weekly"
    label: "今週の振り返り"
    kind: "llm"
    trigger: "/weekly"
    body: "この内容を今週の振り返りとして3点に要約して: ${selection}"
agents:
  claude-code:
    command: "claude"
    args: ["--file", "{file}", "--prompt", "{instruction}"]
    aliases: ["claude", "cc"]

任せる|エージェントに任せる ({{ }})

ひとことで: ノートに {{ 指示 }} と書いて Ctrl + Enter。外部のエージェントCLIがバックグラウンドで作業し、結果が {{ }} ごと置き換わります。{{ @名前 指示 }} なら、指示が残って結果は下に入ります。 エージェントCLIが別途必要

この記法をスロットと呼びます。1行書いて Ctrl + Enter だけで振り分ける使い方は、自動セレクター をご覧ください。

スロットの実行中。{{ }} が実行中の表示に置き換わり、ステータスバーにタスクのバッジが出ている
スロットの実行中:{{ }} が「実行中」の表示に置き換わり、ステータスバーにタスクのバッジが出ます
  1. 実行中の表示 エージェントが作業している間、スロットの代わりに入っています。終わると結果に置き換わります(この表示の文字は、UIの言語にかかわらず日本語です)
  2. タスクのバッジ 実行中のエージェントタスクの数です。クリックか Alt + T で、タスクパネルが開きます
書く(AIに質問)
  • 数秒で返ります
  • 答えは対象の文の下に入ります
任せる(エージェント)
  • 数分かけて、Web調査やファイル操作を行います
  • その間もノートの編集を続けられます
まずは {{ }} だけ覚えてください

記法は他にもあります(エージェントを名前で呼ぶ {{ @名前 指示 }} や、LLM・コマンド向けの [[ ]])。迷ったら {{ }} に日本語で書けば動きます。

使い方の手順

  1. {{ と入力するカーソルの真下にクイックセレクターが開き、使える記法が並びます(記法のあとに、ひな形も並びます)
  2. 記法を選ぶ で選び、TabEnter で確定。19 なら一発で確定。Esc で閉じます
  3. 指示を書く{{ code: }} が挿入され、カーソルは指示を書く位置に入ります
  4. Ctrl + Enter で実行するmacOS: Cmd + Enter。小さな 実行 ボタン(再生の三角のアイコン付き)をクリックしても実行できます
{{ code: このプロジェクトの設定ファイルを読み込むGo関数を書いて }}

[? 2025年のGoのリリースサイクルと最新の安定版は? ]
制限・詳しい仕様(実行キーの挙動・入力の補正)
  • 実行するスロットの決まり方: カーソルが {{ }} などのブロックの中にあれば、Ctrl + Enter はそのスロットを実行します。ブロックの外では、自動セレクターが行の内容を見て動きます。カーソルより後ろにある次のスロットを実行し、それもなければノートの最初のスロットを実行する、という従来の動きになるのは、自動判定がオフのときと、行が空白のときだけです。コードブロックの中では、何も起きません。
  • 見つからないとき: 従来の動きになる場面で、ノートにスロットがひとつもないと、ステータスバーに「実行できるスロットが見つかりません(カーソルを {{ }} などのブロック内に置いてください)」と数秒間表示されます。ノートの内容は変わりません。
  • 実行中のとき: そのスロットがすでに実行中なら、「このスロットはすでに実行中です」と表示されます。
  • 実行ボタン: 再生の三角のアイコンが付いた小さなボタンです。カーソルが、まだ実行していない完結したブロックの中にあると、そのブロックの横に現れます(ホバー時の表示: 「このスロットを実行 (Ctrl+Enter)」。macOS では Cmd+Enter)。押すと、Ctrl + Enter と同じ動きをします。[[ @llm ]][[ $ ]]{{ @エージェント名 }} のタスクでは、指示行の右に出ます(実行中は出ません)。
  • クイックセレクター: そのまま文章を打ち続けても、自動的に消えます。
  • 日本語入力のとき: {{【? と打ってしまっても、自動的に半角の記号へ直されます。
  • 誤実行しません: コードブロック・インラインコード・Markdownリンク・URLの中に書かれた記号はスロットとして扱われないため、コード例の中に {{ }} が出てきても実行されません。

既定の記法一覧

記法 プロファイル名 既定のエージェント 用途
{{ ... }} code claude-code コード生成。前置きを省き、そのまま動くコードブロックだけを返します。
[? ... ] research claude-code 調査。Web検索を行い、数値と一次ソースURLを添えて簡潔に回答します。
【? ... 】 writing hermes 文章整形。外部通信をせずローカルだけで、読みやすい日本語の箇条書きに整えます。
[! ... !] adversarial claude-code 批判的レビュー。リスク・脆弱性・ボトルネックを3点指摘します。
[>> ... ] deep-research-and-code(レシピ) 既定エージェント 多段実行。調査 → リスク反証 → 実装コード生成を順番に進めます。
  • 記法ごとに、呼び出すエージェントと前提の指示(システム指示)が決まっています。同じ文章でも、返ってくる形が変わります。
  • どの記法も、先頭に役割名を書けます(例: {{ research: 調べたいこと }})。この名前は、タスクパネルに表示されるラベルになります。
  • {{ @エージェント名 指示 }}@claude@cc@gemini などの別名も使えます)と書くと、そのエージェントに直接頼めます。この形では、指示行が残り、結果が下の結果ブロックに入ります。書き方の詳細は 自動セレクター をご覧ください。
  • プロジェクト内に skills/<名前>/SKILL.md があれば、{{ @skill-name: 指示 }} と書いて、その内容を追加の指示としてエージェントへ渡せます。@名前 は、まずエージェントの名前か別名として探し、なければスキル名として扱います。スキルが見つからないときは、スロットがエラー表示に置き換わります。

実行中の様子とタスクパネル (Alt+T)

実行を開始すると、スロットはその場で {{ ⟳ 実行中... }} に置き換わります({{ @名前 }}[[ ]] のタスクは、指示行の下に実行中の目印が入ります)。エージェントはバックグラウンドで動くので、ほかの場所を編集したり、別のスロットを同時に走らせたりできます。

Alt+Tで開いたタスクパネル。実行中のエージェントタスクが2つ並んでいる
Alt + T:実行中のエージェントタスクが2つ並んだタスクパネル(経過秒数や消去ボタンなど、一部の文字は英語UIでも日本語です)
  1. タスクのバッジ ステータスバーにあります。クリックか Alt + T でパネルが開きます
  2. パネルの見出し 実行中のタスクの数です。消去ボタンで履歴を空にします
  3. 実行中のタスク エージェント名・指示・経過時間・中断ボタンが並びます
  4. ライブ出力 エージェントの最新の出力(Hover Peek)が、実行中は更新され続けます
  • タスクパネル: Alt + T(macOS: Option + T)、または画面下のステータスバーの「実行中」表示をクリックすると開きます。実行中のタスクと直近の履歴が一覧できます。
  • 途中経過(Hover Peek): 各タスクカードに、エージェントが出力した最新の1行が1秒ごとに更新されて表示されます。止まっているのか進んでいるのかがひと目で分かります。
  • 中断: タスクカードの「中断」ボタンでプロセスを終了できます。スロットは元の指示文に戻ります。{{ @名前 }}[[ ]] のタスクでは、実行中の目印が消えます(指示行は残ります)。
  • LLM・コマンドのタスク: タスクパネルには、エージェントのほかに、AIへの質問(Ctrl + L)と [[ @llm ]] のタスク(名前は「LLM」)、[[ $ ]] のタスク(名前は「コマンド」)も並びます。
  • タイムアウト: 既定は180秒で、超えるとスロットにタイムアウトのメッセージが入ります。設定 → 連携 の「エージェント(任せる)」で10〜600秒に変更できます。ただし agents.yaml がすでにある場合(「agents.yaml を開く」で作られた場合も)は、ファイルの値のほうが優先されます。

結果の差し込みは、あなたが約0.5秒タイピングを止めるまで待ってから行われます。入力中に横から書き換えられて、カーソルが飛ぶことはありません。

結果の受け取りと取り消し

エージェントの結果が差し込まれた直後のエディタ。左端に琥珀色の線が出ている
Ghost Diff:結果が差し込まれて約0.3秒後の、エディタの左端付近
  1. 左端の琥珀色の線 エージェントの結果でノートが書き換わった目印です。設定した時間がたつと消えます
  2. 差し込まれたテキスト スロットの代わりに入った、エージェントの結果です。ハイライトの時間内に Esc を押すと、元のスロットに戻ります
  • Ghost Diff(左端の線): 結果が差し込まれた直後、エディタの左端に太さ3pxの琥珀色の線が出ます。線はエディタの高さいっぱいに出るので、変更された行だけに付くわけではありません。
  • 表示時間: 設定 → 連携 の「変更箇所のハイライト時間 (ミリ秒)(Ghost Diff)」(既定4000ms、1000〜10000)で変えられます。時間が過ぎると線は消えます。
  • 取り消し: この間(設定した時間 + 1秒)に Esc を押すと、そのスロットだけが元の指示文に戻ります。Ctrl + Z でも、直前のスロット実行を同じように取り消せます。
  • 1行に収める: 文章の途中に埋め込んだスロット(同じ行に他の文字がある場合)は、結果の改行が取り除かれて1行に収まります。

承認ゲート(レシピの途中確認)

[>> ... ] のようなレシピは、複数のステップを順番に実行します。危険な操作の手前で人間の確認を挟みたいときは、レシピに requires_approval_step を設定します。そのステップの後で実行が一時停止し、ノートに次のような行が挿入されます。

- [ ] 次のステップ(実装コードを生成する)を実行する // approve
  1. 内容を確認する[ ][x] に書き換えます
  2. Ctrl + Enter を押す続きが実行されます。チェックを入れなければ、そこで止まったままです

エージェントCLIは別途インストールが必要です

MD-Memoはエージェント本体を同梱していません。claudecodexollamaagy などのコマンドを事前にインストールし、パスが通った状態にしておいてください。

注意: 組み込みの agy エージェントは確認なしで動作します

組み込みの agy(Antigravity)エージェントは --dangerously-skip-permissions を付けて起動されるため、スロットから実行すると、ファイルの編集やコマンドの実行を確認なしで行います。選択中のエージェントがこのように設定されている場合は、設定 → 連携に警告が表示されます。確認を挟みたい場合は、agents.yaml(後述)で agy を上書きし、args からこのフラグを外してください。

制限・詳しい仕様(エラー表示・作業ディレクトリと .env)

コマンドが見つからないと、スロットは次のようなエラー表示に置き換わります。原因を直したあと、同じスロットにカーソルを置いて Ctrl + Enter を押せば再実行できます。

{{ ⚠ エラー: エージェント起動失敗: ... (再試行: Ctrl+Enter) }}
  • 作業ディレクトリ: ノートのある場所から上へたどって見つかったプロジェクトルートです。.md-memo/agents.yamlagents.yml / agents.json でも可)、AGENTS.mdskills/.git/ のいずれかがあるフォルダで、どれも見つからなければノートのあるフォルダです。
  • .env: プロジェクトルートに .env があれば、その内容が環境変数としてエージェントへ渡されます(読み込まれるのはこのファイルだけです)。

agents.yaml で自分好みにする

記法もエージェントも、すべて agents.yaml で変更・追加できます。

  1. 「agents.yaml を開く」を押す設定 → 連携 の「エージェント(任せる)」にあります。ファイルがなければ、コメント付きの雛形が自動生成されて開きます
  2. 記法・エージェント・レシピを書き換えるUTF-8(BOMなし)で保存します
  3. 次のスロット実行から反映される構文エラーがあると、エラーは出ずに既定の設定に戻ります。記法(slot_profiles / recipes)や、別名(aliases)・ひな形(snippets)を変えたときは、MD-Memoを再起動してください({{ の一覧・パレット・短縮語の展開が新しくなります。{{ @別名 }} の実行とコマンドバーの候補は、再起動しなくても新しい内容になります)

読み込まれる場所は、上から順に最初に見つかったものです(.yaml / .yml / .md / .json のいずれでも構いません)。

  1. <スクラップフォルダ>/.md-memo/agents.yaml(プロジェクトごとの設定)
  2. %APPDATA%\md-memo\agents.yaml(macOS: ~/Library/Application Support/md-memo/agents.yaml
設定例と書き方のルール
version: 2
default_agent: claude-code
timeout_seconds: 180
hover_peek_enabled: true
ghost_diff_duration_ms: 4000

# 1. 呼び出すCLIの定義。{instruction} は指示文、{file} はノートの絶対パスに置き換わります。
agents:
  claude-code:
    command: "claude"
    args: ["--file", "{file}", "--prompt", "{instruction}"]
    description: "Claude Code"
  my-agent:
    command: "my-cli"
    args: ["--prompt", "{instruction}"]
    description: "社内用エージェント"

# 2. 記法とエージェントの対応。ここに書いた分だけが有効になります。
slot_profiles:
  - trigger_open: "{{"
    trigger_close: "}}"
    name: "code"
    agent: "claude-code"
    system_instruction: "前置きを省き、そのまま動くコードブロックのみを出力してください。"

  - trigger_open: "<<"
    trigger_close: ">>"
    name: "review"
    agent: "my-agent"
    system_instruction: "変更点をレビューし、指摘を箇条書きで返してください。"

# 3. 複数ステップをまとめて実行するレシピ。
recipes:
  - trigger_open: "[>>"
    trigger_close: "]"
    name: "deep-research-and-code"
    description: "調査 → リスク反証 → 実装"
    steps:
      - "最新の公式仕様とベストプラクティスを調査する"
      - "移行リスクと破壊的変更を指摘する"
      - "上記を踏まえて実装コードを生成する"
    requires_approval_step: 2
    self_refine: true
  • プレースホルダ: {instruction} はスロットに書いた指示、{file} は現在のノートの絶対パスに置き換わります。{instruction} をどこにも書かなかった場合は、最後の引数として自動的に追加されます。
  • 記号の選び方: trigger_open / trigger_close には、Markdownの通常の記法(#*- など)とぶつからない組み合わせを選んでください。
  • 上書きの挙動: slot_profilesrecipes を書くと、既定の記法は置き換わります。既定の4種類も残したい場合は、必要なものを書き写してください。一方 agents は、書かなかった既定のエージェント定義がそのまま残ります。
  • aliases: エージェントに aliases: ["claude", "cc"] のように書くと、{{ @cc 指示 }} と短い名前で呼べます。書かなくても、claude-codeagy には既定の別名が付きます。
  • snippets: 末尾に snippets: を書くと、自作のひな形が、{{ のクイックセレクターやコマンドパレットの「タスクのひな形を挿入」に並びます。書き方は 自動セレクター の「ひな形」をご覧ください。
  • self_refine: true にすると、レシピの最初のステップで「下書き → 自己批判 → 修正」を最大2回繰り返してから次へ進みます。
  • ファイルは UTF-8(BOMなし)で保存してください。

提案|アクション候補 (Ctrl+J)

ひとことで: 「何をすればいいか分からない」ときに、いま書いている内容から次の一手を最大3件のカードで提案します。 Ctrl + J 内蔵ルールで動く
Ctrl+Jで開いたアクション候補のパネル。エージェントに任せる、コマンドを実行する、文章を書くの3つの提案が並んでいる
Ctrl + J:3つの提案(任せる・実行・書く)が並んだアクション候補のパネル
  1. パネルの見出し キーのヒントです。Ctrl+1〜3 で即実行、Ctrl+Tab で選択を移動、Enter で決定、Esc で閉じます
  2. 任せる バックグラウンドで動くエージェントに、作業を渡します
  3. 実行 コマンドを実行して、その出力を挿入します
  4. 書く 内蔵のAIが文章を書いて、挿入します

カードは、性質の異なる候補になるよう選ばれます。選ぶだけで、その動詞の入口へそのままつながります。

任せる
  • {{ … }}[? … ] のスロットを挿入して、エージェントへ渡します
実行
  • git status のようなシェルコマンドを走らせます
書く
  • AIに文章を作らせます
  • Jev 以外の外部モデル(OpenRouter のチャットモデルや自前の /predict サーバー)を設定したときだけ出ます

内蔵のローカル規則(既定)では「任せる」と「実行」のカードが出て、並びは「任せる/実行/任せる」になることが多くなります。

Jev を設定したとき: 出るカードは内蔵のものと同じで、いまのメモに合うものを Jev が選んで上位に並べます。Jev が文章を書くことはありません。設定のしかたと送信先は、下の「送信されるデータ」にあります。

Ctrl1〜3
候補を直接選んで実行
macOS: Cmd + 1〜3。Alt + 1〜3 でも可
CtrlTab
選択カードを移動
Ctrl + Shift + Tab で逆方向。macOS でも Ctrl キーです
Enter
選択中のカードを実行
Ctrl + Tab で選択を動かしたあとに押します
Esc
閉じる
パネルを閉じます
実行前の安全性チェック

シェルコマンドを実行する候補は、実行前に必ず安全性チェックを通ります。rmddmkfs といった破壊的コマンド、システム重要ディレクトリへの書き込み、フォーク爆弾などを検出すると、候補は実行されずに理由が表示されます。既知の危険パターンを対象とした防御なので、最終的な確認はご自身で行ってください。

制限・詳しい仕様(パネルの挙動・自動提示・バッジ)
  • ヒント行: パネルが開いている間は、「Ctrl+1..3 即実行 / Ctrl+Tab 移動 → Enter 決定 / Esc 閉じる」が表示されます。
  • Enter だけを押したとき: Ctrl + Tab で選択を動かさないまま Enter を押すと、ただの改行になります(候補は実行されず、パネルは閉じます)。
  • 書くことの邪魔になりません: 数字キーだけ・Tab だけ・Ctrl + Enter自動セレクターとスロットの実行に使われます)は、パネルに横取りされません。
  • 自動提示: Ctrl + J で呼び出すほか、入力が一定時間止まったときに自動で提示できます(既定で有効)。気になる場合は、設定 → 連携 の「提案(アクション候補)」で「手動呼び出しのみ」を選びます。待機時間の長さもそこで調整できます。
  • キーの変更: ショートカットキー自体は、設定 → ショートカット から自由に変更できます。
  • ステータスバーのバッジ: 「アクション」バッジが現在のモードを表し、クリックするたびに ON → 手動 → OFF → ON と切り替わります。表示は「アクション: ON」「アクション: Ctrl+J」(設定したキー。macOS では Cmd+J)「アクション: OFF」のいずれかです。設定 → 連携 → 提案(アクション候補)の2つのチェックボックスと連動しており、OFF の間は Ctrl + J を押しても何も起こりません。
  • 出力のないコマンド: 「実行」カード(sh カード)のコマンドが成功して何も出力しなかったときは、> (出力なし) が挿入されます。実行されたことが分かるようにするためで、これはアクション候補だけの動作です(コマンドバーは、結果のタブに「(no output)」と表示します)。この挿入文字列は、英語版・日本語版どちらのビルドでも日本語のままです。
  • 作業ディレクトリ: 「実行」カードのコマンドは、MD-Memoアプリ自身の作業ディレクトリで実行されます。たとえば git status -s は、MD-Memoを起動したフォルダの状態を返します。
制限・詳しい仕様(送信されるデータと Jev の使い方)
  • 既定では、内蔵のローカル規則だけで候補を出します。ノートの内容は外部に送信されません。
  • 送信されるのは、下のどれかを設定した場合だけです。
  • OpenRouter 経由の Jev: Base URL とモデル名を既定のまま(https://openrouter.ai/api/v1jev-latest)にして、OpenRouter の API キー(sk-or-v1-…)を入力します。送信先は https://openrouter.ai/api/v1/systemone に固定です。
  • TypeSafe の Jev: Base URL を https://api.typesafe.ai にして、TypeSafe の API キーを入力します。送信先は https://api.typesafe.ai/v1/systemone です。
  • OpenRouter のチャットモデル: モデル名を Jev 以外(例: google/gemini-…)にして OpenRouter のキーを入力します。候補の文面をそのモデルに書かせます(送信先は OpenRouter の chat/completions)。
  • 自前のサーバー: Base URL を上のどれでもない URL にすると、<Base URL>/predict へ送られます。
  • キー欄は1つなので、キーの種類は Base URL とキーの形(OpenRouter のキーは sk-or- で始まります)で判断します。TypeSafe のキーを OpenRouter 用の Base URL のまま入れても、どこにも送られず、内蔵の候補になります。
  • Jev は文章を書きません。内蔵の候補をすべて並べて「いまのメモに最も合うのはどれか」を1回だけ尋ね、その答えで並べ替えます。出るのは内蔵の候補だけです。
  • Jev が答えられなかったとき(キーの誤り、残高不足、通信エラー、5秒の待ち時間切れ、確信が低いとき)は、内蔵ルールの候補に戻ります。そのキーを別のサービスへ送り直すことはありません。
  • 送られるのはキャレット周辺の抜粋で、キャレットの前が最大1,500文字、後ろが最大500文字(合計約2,000文字)です。メモが空のときは送りません。
  • Base URL とモデル名の欄には https://openrouter.ai/api/v1jev-latest があらかじめ入力されていますが、API キーが空のままなら外部には送られません。
  • 安全性チェックの正体は AST ガードレールです。内部名称の意味は 用語集 にまとめています。

エディタ & スプリット表示 (Ctrl+\)

ひとことで: 高速なモノスペースMarkdownエディタを2ペインに分けて、左で書きながら右でプレビューを見ます。 Ctrl + \ 設定不要
スプリットビュー。左にMarkdown、右にMermaid図をレンダリングしたライブプレビューが表示されている
スプリットビュー:左にMarkdown、右にMermaid図をレンダリングしたライブプレビュー
  1. エディタ Markdownの元のテキストです
  2. プレビューの見出し ノート名と、ペインのボタンが並びます
  3. Mermaidの図 ノートのコードブロックから描画された図です
  4. スクロール同期 左右を一緒にスクロールするかを切り替えます
  5. 境界線 ドラッグで幅を変え、ダブルクリックで50:50に戻します
  1. 2ペインに切り替えるヘッダーの分割アイコン、または Ctrl + \(macOS: Cmd + \
  2. 右ペインをプレビューにする右ペインのプレビューアイコンで、リアルタイムHTMLレンダリングを表示します
  3. スクロールは連動します片方をスクロールすると、もう片方も追従します

プレビューだけを横に開くコマンドは Ctrl + Alt + V(macOS: Cmd + Option + V)です。

Mermaid 図の自動描画 & 画像生成

ひとことで: ```mermaid で書いた図は、プレビューにそのまま描画されます。高解像度のPNG画像として書き出すこともできます。
プレビューで描画 設定不要
  • ```mermaid で記述したフローチャート、シーケンス図、ガントチャートが対象です
  • プレビュー画面で、リアルタイムに図としてレンダリングされます
図の画像化 Geminiのキーが必要
  • 図の上で右クリックして「図の画像化...」を選びます
  • Gemini(Nano Banana 2 Lite)と連携して、高解像度PNG画像としてエクスポートします
制限・詳しい仕様(画像化の設定)
  • モデル・アスペクト比・解像度は、設定 → AIモデル の「画像生成」で選びます。
  • Gemini APIキーの欄が空のときは、Visionのキー、次にテキストのキーの順に引き継がれます。
  • 画像は assets/diagram_<数字>.png に保存され、![Generated Diagram](assets/diagram_...png) が挿入されます。先にノートを保存しておくと、相対リンクになります。

高速並列スクラップ検索 (Ctrl+Shift+F)

ひとことで: 過去数万行のデイリースクラップから、探したい単語を150ms未満で見つけ、クリックした行へ一瞬でジャンプします。 Ctrl + Shift + F 設定不要
Ctrl+Shift+Fで開いたスクラップ検索。クエリ API と、その検索結果が表示されている
Ctrl + Shift + F:「API」で検索した結果
  1. 検索ボックス 入力するたびに、すべてのデイリースクラップを検索します
  2. ファイル名と行番号 一致した場所です
  3. 一致した行 前後の1行つきで表示されます。Enter かクリックで、その行を開きます
  1. 検索モーダルを開くCtrl + Shift + F(macOS: Cmd + Shift + F
  2. 探したい単語を入力する過去のデイリースクラップを串刺しで検索します
  3. 結果の行をクリックするその行へ一瞬でジャンプします
制限・詳しい仕様

CPUの全コア(runtime.NumCPU())を駆使した、マルチスレッド並列Grepで検索しています。

Mobile Drop|スマホから送る (Ctrl+Shift+U)

ひとことで: スマホでQRコードを読み取るだけで、写真・ボイスメモ・テキストやURL・小さなテキストファイルを、PCのメモへ送れます。アプリもアカウントも不要です。 Ctrl + Shift + U
スマホQRコードを読み取る
スマホ写真・ボイスメモ・テキストを選んで送信
PC項目ごとに見出しが付いて、メモの末尾に追記
PC側のMobile Dropダイアログ。QRコード、ペアリング用のアドレス、スマホと共有中の選択テキスト、残り時間のカウントダウンが表示されている
PC側のダイアログ:QRコード、アドレス、スマホと共有中の選択テキスト、残り時間(QRコードとアドレスはデモ用の値です)
  1. QRコード スマホのカメラで読み取ります(スマホとPCは同じWi-Fi / LAN に)
  2. アドレス QRコードの先にある、使い捨てのアドレスです
  3. スマホに共有中 エディタで選択中のテキストが、スマホに表示されます(「PCからのテキスト」カード)
  4. カウントダウン 操作がないときのタイムアウトまでの時間です。0になるとダイアログが閉じ、アドレスは使えなくなります(スマホでの操作があると延びます)
  5. 外部接続への切り替え LTEや別のWi-Fiから使うための、Cloudflareトンネルへのスイッチです(任意)
  1. ダイアログを開くツールバーのスマホアイコン、Ctrl + Shift + U(macOS: Cmd + Shift + U)、またはコマンドパレットの「Mobile Drop」
  2. スマホのカメラでQRコードを読み取るスマホはPCと同じWi-Fi(同一LAN)に。コードの下にアドレスも文字で表示されるので、手入力もできます
  3. 送信トレイに追加する写真・ファイル(最大10件、合計60MBまで)、ボイスメモ、テキストを、好きな組み合わせで
  4. 「まとめてPCへ送信」を押す1つだけのボタンです。アップロードの進捗が表示されます
  5. メモに追記されるダイアログが閉じ、アクティブなメモの末尾に追記されます。見出しは項目ごとに ## Mobile Drop [14:20:05] — <ファイル名>

スマホに開くページ

スマホで開いたMobile Dropのページの上部。PCからのテキスト、2つの項目が入った送信トレイ、撮影・ファイル選択・録音のボタンが並んでいる
スマホで開いたページの上部(ラベルは日本語と英語の併記です)
  1. PCからのテキスト PCで選択中のテキストです。下のボタンで、スマホにコピーできます
  2. PCへ送信トレイ ここまでに追加した項目(写真とメモのファイル)です。✕ で取り除きます
  3. カメラで撮影 スマホのカメラで写真を撮ります
  4. ファイルを選択(複数可) スマホから写真やテキストファイルを選びます
  5. 音声を録音 スマホの録音アプリが開きます。録音はトレイに追加され、PC側で文字起こしされます
スマホで開いたMobile Dropのページの下部。テキスト・URL欄と、まとめてPCへ送信のボタンが表示されている
同じページを下までスクロールしたところ
  1. テキスト・URL 欄 メモやリンクを貼り付けて、テキストとして送ります
  2. まとめてPCへ送信 トレイとテキストを、PCのアクティブなメモへ一度に送ります(1回のセッションで送れるのは1回です)
スマホのボタン メモに入る内容
写真・ファイル 写真はビジョンモデルでMarkdownに文字起こしされます。.md.txt はそのまま、.html.js.json.py などのコードや設定ファイルはコードブロックで囲んで追記します。Shift_JIS のテキストは自動で変換します。
ボイスメモ 音声入力と同じ方法で文字起こしされ、テキストとして追記されます。
テキスト・URL 入力・貼り付けた文字をそのまま追記します。URLだけの場合はMarkdownリンクになります。

写真とボイスメモの行き先

APIを設定済み
  • 写真: Ctrl + V の画像OCRと同じビジョンモデル(設定 → AIモデル → 画像解析)が、Markdownに文字起こしします。写真そのものは保存されません
  • ボイスメモ: 音声入力と同じ方法(同じGeminiモデル)で文字起こしされ、テキストとして追記されます
  • ローカル(OllamaやLM Studio)のビジョンモデルなら、キーなしでもOCRされます
未設定、または失敗したとき
  • キーがない・モデルが非対応・文字起こしが空・HTTPエラー・タイムアウトのどれでも、写真とボイスメモは失われません
  • Ctrl + Shift + V で画像を貼ったときと同じように ./assets/ に保存され、リンクと理由の1行が入ります
  • 何件そうなったかは、トーストで知らせます
制限・詳しい仕様(保存されるときの行と保存先)

保存されるときにノートへ入る行は、状況によって次の4通りです。この行は、UIの言語にかかわらず日本語です。

状況 写真 ボイスメモ
何も設定されていない ![name](./assets/...)> 画像OCRをスキップし、画像として保存しました: <エラー> (設定 → AIモデル → 画像解析) [name](./assets/...)> 文字起こしをスキップし、音声として保存しました: <エラー> (設定 → AIモデル → 音声入力)
そのほかの失敗 > 画像OCRに失敗したため、画像として保存しました: <エラー> > 文字起こしに失敗したため、音声として保存しました: <エラー>
  • 保存先: ./assets/YYYY-MM-DD-HHmmss.<拡張子> です。メモの隣、なければワークスペースフォルダ、それもなければアプリのデータフォルダ(この場合は file:// リンク)に保存されます。名前が重複すると -2-3 が付きます。
  • 保存にも失敗したとき: assets への保存まで失敗した場合だけ、その項目の見出しに続けて [Mobile Drop: <ファイル名> の処理に失敗しました: <エラー>] が追記されます。残りの項目は問題なく届きます。
制限・詳しい仕様(送れるものと上限)
  • 写真・ファイルは最大10件、合計60MBまでです。
  • 1件あたりの上限は、画像20MB、音声25MB、テキストファイル2MBです。それ以外のバイナリは受け付けません。
制限・詳しい仕様(スマホのページと「PCからのテキスト」)
  • ページの並び: 上から順に、「PCからのテキスト」カード、「PCへ送信トレイ」(追加した項目ごとに名前・サイズ・削除用のが表示されます)、カメラ/ファイル選択(複数可)/ボイス録音、テキスト入力欄です。送信ボタンは1つだけです。
  • 「PCからのテキスト」: PCで選択中のテキスト(ダイアログを開いた時点で選択がなければ、クリップボードのテキスト)が、ワンタップコピー付きで表示されます。2秒ごとに更新され、最大64KBまで表示します。
  • PC側の表示: ダイアログには「スマホに共有中: ...」として、80文字に切り詰めて表示されます。

つなぎ方を選ぶ

同じWi-Fi(LAN) 既定
  • スマホとPCが同じネットワークにいる必要があります
  • 通信は、そのネットワークの外に出ません
  • ボイスメモは、スマホ本体の録音アプリが開きます
  • 位置情報は、要求も添付もしません
Cloudflare経由(LTE・別のWi-Fi)
  • ダイアログの「Cloudflare経由で外部から接続」を押します
  • アカウント不要の Cloudflare Quick Tunnel を開き、QRコードが一時的な https://…trycloudflare.com のアドレスに切り替わります
  • ボイスメモは、ページ内でそのまま録音できます(HTTPS)
  • 位置情報は、任意で1回だけ添付できます
  • 送信内容は Cloudflare のサーバーを経由します
制限・詳しい仕様(Cloudflareトンネル)
  • cloudflared が必要です。MD-Memoが自動でダウンロード・インストールすることはありません。
  • 未導入の場合は、ダイアログにインストールコマンド(Windows: winget install --id Cloudflare.cloudflared -e、macOS: brew install cloudflared)と「コピー」ボタンが表示されます。実行してから、もう一度ボタンを押してください。
  • トンネルを使っている間、送信内容は Cloudflare のサーバーを経由します。
  • 90秒について: トンネルの90秒は、操作がない状態が続いたときのタイムアウトです。スマホでの操作があるたびに延び直します。「発行から90秒だけ有効」という固定の期限ではありません。
制限・詳しい仕様(安全性と制限)
  • ダイアログを開いている間だけ動きます。開くとPC内で小さなサーバーが起動し、1回送信されたとき、60秒間操作がなかったとき、ダイアログを閉じる/キャンセルしたときに停止します。スマホでページを開くことや、スマホ側での作業(ファイル追加・録音・入力)はすべて操作に数えられ、このタイマーをリセットします。そのため、大きめのバッチを組んでいても、60秒のアイドルタイムアウトにはかかりません。
  • 1つのQRコードで送れるのは1回だけです。続けて送るときは、ダイアログを開き直してください。使い捨てトークンはリクエスト本体を読み込む前にチェックされます。
  • コードを持つ人だけが送れます。アドレスにはランダムな使い捨てトークンが含まれ、トークンのないアクセスは、中身を読み込む前に拒否されます。
  • 写真とクラウドモデル。ビジョンモデルがGeminiなどのクラウドサービスの場合、写真はそのプロバイダーへ送られます(Ctrl + V で画像を貼り付けたときと同じです)。APIキーが未設定でも写真は失われず、画像として保存されます(上の「未設定、または失敗したとき」)。
  • 位置情報は任意で、トンネル使用時のみです。Cloudflareトンネル経由(HTTPS)で接続しているときだけ、スマホは位置情報を1回だけ、1度限りの試行として添付できます。付与されるのは最初の項目の見出しだけで、## Mobile Drop [14:20:05] — <ファイル名> (34.693, 135.502) のようになります。通常のLAN(HTTP)接続では、位置情報を要求することも添付することもありません。
制限・詳しい仕様(送信が途中で切れないための仕組み)

通常のLAN接続では、ボイスメモを録るとスマホ本体の録音アプリが開きます。その間もセッションが切れないよう、スマホのページは次のように動きます。

  • カメラ、ファイル選択、録音アプリへ切り替える直前に、PCへ「セッションをあと120秒まで延ばしてほしい」と依頼します(PC側のセッションは、通常60秒操作がないと終わります。サーバーは、この依頼を最大180秒までに制限します)。
  • ページに戻ってくると、PCへ生存確認を送ります。
  • 選んだファイルは、その場でメモリにコピーします(録音アプリがまだ書き込み中だったり、アクセス権を取り消したりすることがあるためです)。
  • ファイルを読み込んでいる間は、送信ボタンが待機します。
  • 送信に失敗したときは、PC側のセッションが生きているかを確認します。生きていれば、自動で1回だけ再送し、それでも失敗したら「通信エラー。もう一度お試しください」と表示します。
  • PC側のセッションが終わっていれば、「PCとの接続が切れました。PCでMobile Dropを開き直し、QRコードを読み取り直してください」と表示します。
  • 録音アプリを開かず、ページ内で直接録音するには、HTTPSのCloudflareトンネルが必要です。
スマホでページが開かないとき
  • 両方が同じWi-Fiにつながっているか確認してください。ゲスト用ネットワークや一部のルーターは、機器どうしの通信を遮断します(AP分離)。PCまたはスマホのVPNが邪魔をすることもあります。
  • Windowsでは、初回にMD-Memoのファイアウォールの確認が出ることがあります。プライベートネットワークで許可してください。
  • QRコードのアドレスは、既定の通信経路(デフォルトルート)を持つネットワークアダプタのものです(WSLやDockerなどの仮想アダプタは除外します)。スマホがそのネットワークにいない場合は、上のCloudflare経由の接続を使ってください。

ツールバーのアイコンは、設定 → 一般 → ツールバーと右クリックメニューで、隠したり並べ替えたりできます。ショートカットとコマンドパレットからは、どちらの場合も開けます。

コマンドパレット (Ctrl+Shift+P)

ひとことで: MD-Memoのコマンド(20 個)と、開いているフォルダのノートを、キーボードだけで検索して実行します。 Ctrl + Shift + P 設定不要
Ctrl+Shift+Pで開いたコマンドパレット
Ctrl + Shift + P:コマンドパレット
  1. 入力欄 打つと、コマンドやノートが絞り込まれます
  2. ハイライト中のコマンド Enter で実行します
  3. 説明とショートカット 各コマンドに、1行の説明と、割り当てられたキーが表示されます(たとえば「AIに質問」には Ctrl+L)
  1. パレットを開くCtrl + Shift + P(macOS: Cmd + Shift + P
  2. 入力して絞り込むコマンド名やノートのタイトルの一部を打ちます(部分一致)
  3. 選んで実行するコマンドは実行され、ノートは開きます
制限・詳しい仕様
  • 検索の対象は、20 個のコマンドと、開いているワークスペースフォルダのノートです。
  • 「AIに質問」「コマンドバー」も、パレットから開けます。「コマンドバー: コマンドを実行」「コマンドバー: AIにコマンドを書かせる」は、モードを指定して開く項目で、既定のキーはありません。
  • 「タスクのひな形を挿入」(説明: Ctrl+Enter で実行できる LLM・エージェント・コマンドのひな形)は、ひな形の一覧を、カーソルの位置に開きます。同じ一覧は、{{ を打っても出ます。詳しくは 自動セレクター の「ひな形」をご覧ください。
  • 照合は単純な部分一致です。曖昧検索(ファジー検索)ではありません。
  • 設定項目は検索できません。設定画面は Ctrl + ,(macOS: Cmd + ,)で開きます。

03 設定リファレンス (Settings Deep Dive)

ひとことで: 設定画面は5つのタブ(一般・AIモデル・連携・同期・ショートカット)に分かれています。ヘッダーのスライダーアイコンか、右クリックメニューの「設定...」から開きます。
設定画面の一般タブ
設定:一般タブ(テーマ・ウィンドウ・エディタ挙動)
  1. テーマ アクセントカラーの配色です
  2. 表示言語 日本語 / English を切り替えます
  3. 起動とウィンドウ 前回のタブと未保存メモの復元、分割表示での起動、トレイ常駐
  4. エディタと入力 自動保存、IME Guardian、AI校正、カーソルの発光
  5. ツールバーと右クリックメニュー 表示する項目と並び順を選びます(下の手順を参照)

1. 一般タブ (General)

項目 既定値 説明
アクセントカラー配色 (テーマ) ダークオリーブ Dark Olive, VS Code Blue, Forest Teal, Charcoal Monochrome から選択。
表示言語 (Language) 日本語 / English UI全体の表示言語を切り替えます。
前回開いていたタブの復元 有効 (ON) 再起動時に、未保存のバッファや開いていたタブを完璧に復元します。
起動時に分割エディタで表示 無効 (OFF) 常に2ペイン状態で起動したい場合はチェックを入れます。
トレイに常駐 有効 (ON)(Windows) Windowsでは、閉じるボタンで終了せずトレイに潜み、Ctrl+Alt+M でミリ秒起動します。macOSにはトレイがなく、ウィンドウを閉じても常にDockに残ります。この項目はmacOSでは無効化され、「現在この OS では未対応のため、この設定は反映されません。」と表示されます。
1.5秒入力停止時に自動保存 有効 (ON) 既存ファイルを開いて編集した際、タイピング停止から1.5秒で自動保存します。
IME Guardian システム言語が日本語のときだけ有効 (ON)(macOSでは既定で無効 (OFF)) コードブロック内での全角英数誤爆を自動補正します。macOSでは入力ソースの自動切り替えにまだ対応していないため、既定でオフになり、設定画面にその旨の案内が表示されます。
AI入力間違い・誤字脱字の自動補正 (Alt+C) 有効 (ON) Alt + C の校正コマンドのオン/オフを切り替えます。
停止時のカーソル発光 有効 (ON) タイピングが止まった際、カーソル周辺に穏やかな光のアフォーダンスを表示します。
Ctrl+V で Web・Word・Excel の内容を Markdown にして貼る 有効 (ON) 表・見出し・リスト・リンクなど、構造のあるHTMLだけを Markdown に変換します(コードとログはそのまま)。Ctrl + Shift + V は常に加工なしで貼ります。オフにすると、Ctrl + V がプレーンテキスト、Ctrl + Shift + V が変換になります。
ツールバーと右クリックメニュー すべて表示 ツールバーのアイコンと右クリックメニューの項目を、表示・非表示と並び順で整えられます。手順は下の「ツールバーと右クリックメニューを整える」を参照してください。

ツールバーと右クリックメニューを整える

  1. セクションを開く設定 → 一般 の「ツールバーと右クリックメニュー」(「表示する項目と並び順を変更」)を開きます
  2. 表示する項目を選ぶツールバーのアイコンと右クリックメニューの項目を、チェックで選びます。矢印でグループ内の並びを変えられます
  3. 変更はすぐ反映される「キャンセル」で元に戻ります。「初期設定に戻す」で、元の並びに戻ります
設定の一般タブで、ツールバーと右クリックメニューのセクションを開いたところ
ツールバーと右クリックメニューの設定を開いたところ
  1. セクションの見出し 表示する項目と並び順を選びます
  2. チェックボックス チェックで表示、外すと非表示です(設定アイコンだけは常に表示されます)
  3. 上へ・下への矢印 グループの中で、項目を動かします
選択した行の上で開いた右クリックメニュー
選択した行の上で右クリックしたメニュー
  1. 編集コマンド 元に戻す・やり直し・切り取り・コピー・貼り付け・すべて選択
  2. 移動 検索・置換・行へ移動・コマンドパレット・フォルダを開く
  3. AIとコマンドバー AIに質問・誤字・脱字の補正・コマンドバー・音声入力など
  4. 表示 プレビューの切り替えと、右に分割して開く(メニューをスクロールすると Zen モードと全画面表示もあります)。表示する項目は、設定で変えられます
  • 設定アイコンは並べ替えだけできて、非表示にはできません(設定画面へ戻れるよう、常に表示されます)。
  • 非表示にした項目も、ショートカットとコマンドパレットからは使えます。

設定画面の下にある「エクスポート...」「インポート...」は、設定・エージェント定義・スキルを 1 つのパッケージ(.mdmemopack)で持ち運ぶ機能です。詳しくは 6. 設定のエクスポート / インポート

2. AIモデル タブ (AI Models)

ひとことで: 完全オフラインのローカルLLMから最新のクラウドAPIまで、機能ごとにモデルを自由に設定できます。
設定画面のAIモデルタブを、音声入力のグループまでスクロールしたところ
設定:AIモデルタブ(音声入力のグループまでスクロールしたところ)
  1. 音声モデル 文字起こしに使うモデルです
  2. API 形式 「自動」ならモデル名から選び、固定もできます
  3. 言語コード カンマ区切りで指定します。空欄なら自動判定です
  4. モード スマートは整形、逐語はそのまま書き起こします
  5. カスタム語彙 人名や専門用語を、1行に1語書きます
  6. 無音タイムアウト 何秒の無音で、録音を自動で止めるかを決めます
  • 機能 → 使われるモデル設定: タブの先頭にあるカードで、機能ごとにどのモデル設定が使われるかが一覧できます。たとえば「書く」・チャット・AIに質問はテキストLLMを使い、入力予測や画像OCRはそれぞれ専用の設定を持ち、提案(アクション候補)は連携タブで設定します。
  • ローカルAI (Ollama): 状態バッジと、Ollama の「起動」「停止」ボタン、そして「Gemma 4 導入」ボタンがあります。「Gemma 4 導入」は、Ollama が未導入なら導入したうえで gemma4:e2b モデルを取得します。
  • テキストLLM & AI CLI (執筆・対話・コマンド生成): API Base URL、モデル名、API Key、システムプロンプトを設定できます。接続方式は URL から自動で判定され、URL の下に表示されます(Ollama / Gemini 互換 / OpenAI 互換)。
  • 入力予測 (インライン補完): 専用の URL・モデル・キーを持ち、表示までの待機時間(既定500ms。設定画面では200〜2000ですが、実際の下限は300ms)と最大予測トークン数(既定30、10〜100)を調整できます。
  • 画像解析 (Vision OCR): Gemini Flash Lite や Qwen 2.5 VL などの画像モデルとキーを指定します。「画像ペースト(Ctrl+V)時に自動で画像マークダウン化 (Vision OCR) を実行」のスイッチもここにあります(既定でオン)。スイッチがオフのとき、またはAPIキーが未設定のときは、貼り付けた画像を assets に保存してリンクで貼ります(Ctrl+Shift+V と同じ)。
  • 画像生成 (Mermaid・図解・イラスト): 図を画像として書き出すときに使うモデル・アスペクト比・解像度を指定します。Gemini API Key の欄が空のときは、Vision のキー、次にテキストのキーの順に引き継がれます。
  • 音声入力 (Voice input): 画像解析(Vision OCR)の設定のすぐ下にあります。使い方は 音声入力 を参照してください。設定項目は次の表のとおりです。

音声入力 (Voice input) の設定項目

項目 設定ファイルのキー 既定 説明
音声モデル voice.model gemini-3.5-transcribe 候補は gemini-3.5-transcribegemini-2.5-flashgemini-flash-lite-latestgemini-3.5-transcribe-live(ストリーミング版)は録音した音声には使えず、指定するとエラーになります。
API 形式 voice.apiStyle 自動 (auto) 自動 / Interactions API / generateContent。自動は、モデル名に「transcribe」を含めば Interactions API、それ以外は generateContent を使います。
言語コード voice.languageCodes 空欄 BCP-47 をカンマ区切りで指定します(例 ja-JP, en-US)。空欄なら自動判定で、言語の混在にも対応します。Interactions API のときだけ使われます。
モード voice.mode スマート (smart) スマート=フィラーを除いて、読みやすく整形。逐語 (verbatim)=そのまま書き起こし。Interactions API のときだけ使われます。
カスタム語彙 voice.customVocabulary 空欄 1行に1語(人名・専門用語)。最大1000語ですが、100語程度までがいちばん効きます。Interactions API のときだけ使われます。
無音タイムアウト (秒) voice.silence_timeout_sec 5 1〜30。この秒数だけ無音が続くと、録音を自動で止めます。
文字起こしプロンプト voice.prompt 既定の指示文 generateContent 形式のモデルでだけ使われます。
APIキー / Base URL voice.apiKey / voice.baseUrl 空欄 空欄なら、画像解析(Vision OCR)のキーとBase URLを使います。設定画面に専用の入力欄はなく、設定ファイルに直接書いたときだけ別のキーを使えます。

3. 連携 タブ (Agent & CLI)

ひとことで: 3つの動詞に合わせた「コマンド(実行する)」「エージェント(任せる)」と、「自動セレクター (Ctrl+Enter)」「提案(アクション候補)」の、4つのセクションに分かれています。
設定画面の連携タブ。コマンド、エージェント、提案の設定が並んでいる
設定:連携タブ(エージェント(任せる)の設定までスクロールしたところ)
  1. agents.yaml を開く エージェントと記法を定義するファイルを開きます
  2. エージェント 既定のエージェントです。コマンドがインストールされているかを示すバッジが付きます
  3. エージェントタイムアウト 実行を打ち切るまでの秒数です
  4. 変更箇所のハイライト時間(Ghost Diff) ミリ秒で指定します
  5. ホバー覗き見(Hover Peek) タスクパネルに、エージェントの最新の出力を表示します

コマンド(実行する)コマンドバーの設定です。

  • CLIコマンド生成モデル: コマンドバーの AI モード(Ctrl+ETab)でコマンドを書かせるモデル名。空欄ならAIモデルタブの設定を引き継ぎます。
  • コマンドの出力の入れ方: 既定は「選択範囲の下に挿入する」です。選んだテキストが残り、その最後の行の下に出力が入ります。「選択範囲を置き換える」にすると、従来のフィルタのように、選んだテキストが出力に置き換わります。
  • 実行結果を新しいタブで開く: オン(既定)のときは、上の入れ方でノートに入れたうえで、結果を新しいタブでも開きます(選択がなければ、新しいタブだけが開きます)。オフのときは新しいタブを開かず、選択がなければ出力をノートの末尾に加えます(「置き換える」なら、ノート全体が出力に置き換わります)。
  • 標準入力パイプ最大サイズ: この欄を変えても効果はありません。cat log | md-memo で流し込める上限は、10MBに固定されています。巨大ファイルによるメモリ圧迫を防ぐための上限です。

エージェント(任せる)スロットから呼び出すエージェントの設定です。

  • agents.yaml を開く: 記法・エージェント・レシピを定義する設定ファイルを開きます。まだ無ければコメント付きの雛形を生成します。
  • エージェント: 記法で指定がない場合に使う既定のエージェント。自動セレクターが、行をエージェントへの依頼に書き換えるときの名前にも使われます。一覧は読み込まれた agents.yaml の内容から作られます。
  • エージェントタイムアウト: 実行を打ち切るまでの秒数(既定: 180秒、10〜600秒)。agents.yaml がすでにある場合(「agents.yaml を開く」で作られた場合も)は、ファイルの値が優先され、この欄の値は使われません。
  • Ghost Diff のハイライト時間: 結果が差し込まれた直後に、エディタの左端へ琥珀色の線が表示される時間です(既定: 4000ms、1000〜10000)。この間と、その後の1秒間は Esc で取り消せます。設定画面では「変更箇所のハイライト時間 (ミリ秒)(Ghost Diff)」と表示されます。
  • ホバー覗き見 (Hover Peek): タスクパネルでエージェントの最新出力行を表示します。
  • agents.yaml の aliases: エージェントごとに、{{ @cc 指示 }} のような短い名前(別名)を付けられます。書かなくても、claude-code には claudeccagy には antigravitygemini が付きます。
  • agents.yaml の snippets: 自作のタスクやコマンドのひな形(idlabelkindtriggerbody など)を書けます。{{ のクイックセレクターと、コマンドパレットの「タスクのひな形を挿入」に並びます。どちらも書き換えたあとは、MD-Memoを再起動すると新しい内容になります(コマンドバーの候補は、バーを開くたびに読み直します)。書き方は 自動セレクター の「ひな形」にあります。

自動セレクター (Ctrl+Enter)自動セレクターの設定です。エージェントの設定の下にあります。

設定画面の連携タブを、自動セレクター (Ctrl+Enter) のグループまでスクロールしたところ。2つのチェックボックスが並んでいる
設定:連携タブの「自動セレクター (Ctrl+Enter)」
  1. 自動セレクターのグループ エージェント(任せる)の設定の下にあります
  2. Ctrl+Enter で内容から動作を自動判定する 既定はオンです。オフにすると、Ctrl+Enter はこれまで通り {{ }} スロットの実行だけを行います
  3. 自動判定したエージェント/コマンドは実行前に確認する 既定はオンです。行を書き換えたところで止まります
  • Ctrl+Enter で内容から動作を自動判定する(AIに質問 / エージェントに任せる / コマンド実行): 既定はオンです。オフにしても、手書きの [[ @llm ]][[ $ ]]{{ @名前 }} は、Ctrl+Enter で実行できます(判定をやめるだけです)。
  • 自動判定したエージェント/コマンドは実行前に確認する: 既定はオンです。行を書き換えたところで止まり、もう一度 Ctrl+Enter で実行します(Ctrl+Z で書き換えを取り消せます)。オフにすると、書き換えと同時に実行します。上のチェックがオフの間は、グレー表示になります。

提案(アクション候補)アクション候補Ctrl+J)の設定です。

  • メモ入力時に自動提示する: 入力が止まったときに候補を出すかどうか。
  • 手動呼び出しのみ: 自動提示をやめ、Ctrl+J を押したときだけ出すようにします。
  • 入力停止から自動提示までの待機時間(秒): 自動提示までの間合いを調整します。
  • API Base URL / モデル名 / API Key: 候補に使う Jev(またはほかのモデル)の接続先。API Key を空のままにし、Base URL を既定値(https://openrouter.ai/api/v1、モデル名は jev-latest)のままにしておくと内蔵のローカル規則を使い、キーを入力するか URL を変更するまで何も送信されません。OpenRouter のキーなら既定のまま、TypeSafe のキーなら Base URL を https://api.typesafe.ai にします。詳しくは アクション候補 の「送信されるデータ」にあります。

4. 同期 タブ (Sync: Scraps & Git)

ひとことで: 日報スクラップの保存先フォルダと、GitHubへのバックグラウンド自動同期を設定します。
設定画面の同期タブ。スクラップフォルダとGitの設定が並んでいる
設定:同期タブ(スクラップフォルダとGit)
  1. デイリースクラップ保存先フォルダ スクラップを保存するフォルダです
  2. バックグラウンドGit同期 ON / OFF を切り替えます
  3. GitリモートURL スクラップ用リポジトリのURLです
  4. 連携 / 初期化 フォルダをリモートにつなぎます
  5. リポジトリの状態バッジ いまのGitの状態を示します
  • デイリースクラップ保存先フォルダ: スクラップファイルが保存されるディレクトリ。「参照...」ボタンで選べます。ObsidianのVaultフォルダやDropboxフォルダに直接指定することも可能です。
  • バックグラウンド Git 同期を有効にする: 起動時に git pull --rebase を行い、編集後に入力が止まると自動で git add/commit/push をバックグラウンド実行します。スクラップフォルダがGitリポジトリのときに動作します。リモートは必須ではありませんが、リモートがないとpushは失敗します。
  • Git自動プッシュ待機時間 (秒): 最後の編集からプッシュするまでの待ち時間です(既定30秒、5〜3600)。
  • リモートブランチ: 同期先のブランチ名です(既定は main)。
  • Git リモートURL・「接続テスト」・「連携 / 初期化」: 空のGitHubリポジトリURL(https://github.com/user/scraps.git)を入力して「接続テスト」で疎通を確認し、「連携 / 初期化」を押すだけで、必要なら git initorigin の設定、最初のコミット、push -u までを自動で行います。
注意: スクラップフォルダの中身はすべてコミットされます

Git同期は、スクラップフォルダで git add .・commit・push を実行します。そこに置いた .env.md-memo/agents.yaml もコミットされるので、秘密の情報は置かないでください。

5. ショートカット一覧

ひとことで: 多くのキーは、設定 → ショートカット で割り当て直せます。キー欄のボタンを押して、新しい組み合わせを押すだけです。
機能 / アクション Windows macOS
グローバル瞬時召喚(呼び出し専用。隠す機能はありません) Ctrl + Alt + M Option + Cmd + M
高速スクラップ並列検索 Ctrl + Shift + F Cmd + Shift + F
コマンドパレット Ctrl + Shift + P Cmd + Shift + P
AIに質問 Ctrl + L Cmd + L
AI 文章校正・誤字脱字修正 Alt + C Cmd + Shift + C
アクション候補を表示 Ctrl + J Cmd + J
コマンドバー(前回使ったモードで開く) Ctrl + E Cmd + E
Mobile Drop(QRでスマホから送信) Ctrl + Shift + U Cmd + Shift + U
自動セレクター(行の内容から動作を判定 / スロットを実行) Ctrl + Enter Cmd + Enter
タスクパネルの開閉 Alt + T Option + T
左右分割(スプリットビュー) Ctrl + \ Cmd + \
プレビューを横に開く Ctrl + Alt + V Cmd + Option + V
そのまま貼る(プレーンテキスト・画像はファイル保存) Ctrl + Shift + V Cmd + Shift + V
音声入力 Ctrl + Shift + R Cmd + Shift + R
リンクを開く Ctrl + クリック Cmd + クリック
リンクを表示(エクスプローラー / Finder) Alt + クリック Option + クリック
Zenモード Shift + F11 Ctrl + Cmd + Z
全画面表示 F11 Ctrl + Cmd + F
ゴーストテキスト単語採用 Ctrl + → Option + →
現在の日時を挿入 F5 Cmd + Shift + I

「コマンドバー: コマンド実行モード」と「コマンドバー: AIがコマンドを作るモード」には、既定のキーがありません。設定 → ショートカット の「コマンドバー」グループで、好きなキーを割り当てられます。Ctrl + K も、既定では何にも使われていないので、割り当てられます。

ショートカットを割り当て直す(設定 → ショートカット)

  1. 割り当てるキー欄のボタンをクリックし、割り当てたい組み合わせを押します。記録中は「キーを押して登録 / Backspace で解除 / Esc でキャンセル」と表示されます
  2. すでに使われているとき「すでに『<操作>』に割り当てられています。上書きしますか?」と確認が出ます。「OK」(Enter)で移動し(元の操作は「未設定」になります)、「キャンセル」か Esc なら何も変わりません
  3. 割り当てないとき記録中に Backspace(または Delete)を押すと「未設定」になり、何も起きなくなります。Esc なら記録のキャンセルです。「初期設定に戻す」で、すべて既定のキーに戻ります

重複を調べるときは、Ctrl と Cmd は同じキーとして扱われます。

設定画面のショートカットタブ。1つの行が新しいキーの入力を待っている
設定:ショートカットタブ。1つの行が、新しいキーの入力を待っています
  1. ヒント行 新しいキーを押します。Backspace で解除、Esc でキャンセルです
  2. 記録中の行 ここでは「AIに質問」の行です。ボタンが「キーを入力...」の表示のまま、キーの組み合わせを待っています
  3. 初期設定に戻す すべてのキーを既定に戻します
すでに割り当てられているキーを記録したときの、上書きの確認ダイアログ
すでに割り当てられているキーを記録したときの、上書きの確認
  1. 確認メッセージ 「すでに『アクション候補を表示』に割り当てられています。上書きしますか?」のように、そのキーを使っている操作が示されます
  2. OK / キャンセル 「OK」(Enter)で上書きし、「キャンセル」(Esc)ならいまの割り当てを残します
  3. 割り当て直している操作 ここでは「AIに質問」の行です。この行のキーを記録中に、すでに使われている Ctrl + J を押しました

割り当てできない予約キー

次の組み合わせはアプリが使っているため、割り当てようとすると「アプリ内部で予約されているため割り当てできません」と表示されます。

環境 割り当てできないキー
Windows / Linux Ctrl + Tab Ctrl + , Ctrl + Shift + V(そのまま貼る) Ctrl + Alt + V(プレビューを横に開く) Alt + T(タスクパネル) Ctrl + →(ゴーストテキストの単語採用) Ctrl + Enter(Shift や Alt を加えた形も。自動セレクターとスロットの実行) Ctrl + C Ctrl + V Ctrl + X Ctrl + A Ctrl + Z Ctrl + Shift + Z Ctrl + Y
macOS Ctrl + Tab Cmd + , Cmd + Q Cmd + H Cmd + Option + H Cmd + M Cmd + Z Cmd + Shift + Z Cmd + X Cmd + C Cmd + V Cmd + A Cmd + Tab Cmd + Space Cmd + Shift + V Cmd + Option + V Option + T Cmd + → Cmd + Enter(Shift や Option を加えた形も)

設定一覧にない、そのほかの固定のキー

  • Ctrl + Enter: 自動セレクターのキーです。カーソル位置のタスクやスロットを実行し、普通の行は内容を見て振り分けます。自動判定がオフのときと、行が空白のときは、従来どおり、カーソル位置のスロット、なければ後ろの次のスロット、それもなければノートの最初のスロットを実行します。コードブロックの中では、何も起きません。Shift や Alt を加えた形も同じ扱いです。そのため、「下に行を挿入」の既定は Shift + Enter(「上に行を挿入」は Shift + Alt + Enter)です。
  • Ctrl + クリック / Alt + クリック: リンクを開く / リンクの場所を表示します。
  • Esc: 音声入力の録音を破棄します。
  • そのまま貼る(Ctrl + Shift + V)は固定で変えられません。音声入力のキーは変更できます。

macOS では、上の表のとおり、それぞれ対応するキーになります。

6. 設定のエクスポート / インポート(パッケージ)

ひとことで: 設定・エージェント定義・スキルを 1 つのファイル(.mdmemopack)にまとめて、ほかの PC に持ち運べます。設定画面の下にある「エクスポート...」「インポート...」から使います。 API キーは、最初は入りません

書き出す(設定 → エクスポート...)

パッケージを書き出すダイアログの上のほう。形式の選択と、設定の区分ごとのチェックボックスが並び、「同期」に「この PC 専用」の印が付いている
「パッケージを書き出し」の上のほう。形式と、設定の区分を選びます
  1. 形式 パッケージ(.mdmemopack)か、設定だけの JSON かを選びます
  2. 設定 区分ごとにチェックを付けます。右上の「すべて」「なし」でまとめて切り替えられます
  3. 同期 「この PC 専用」の印が付き、最初はオフです。スクラップフォルダのパスなど、PC ごとに違う値だからです
同じダイアログを下までスクロールしたところ。エージェント定義の2つのファイル、フォルダごとに分かれたスキル、オフの「API キーを含める」、「書き出す」ボタンが見えている
同じダイアログを下までスクロールしたところ。エージェント定義、スキル、オプションです
  1. エージェント定義 アプリ共通と、プロジェクトの 2 つのファイルが、パスつきで並びます。最初はオンです
  2. スキル いまのプロジェクトのスキルだけが、フォルダごとに並びます。最初はどれもオフです
  3. API キーを含める 最初はオフです。オンにすると、ファイルを受け取った人があなたのキーを使えます
  4. 書き出す 保存先を選ぶと、パッケージが作られます
  1. 「エクスポート...」を押す設定画面の左下にあります。「パッケージを書き出し」が開きます
  2. 入れるものを選ぶ設定の区分、エージェント定義、スキルにチェックを付けます。「同期」とスキルは、最初はオフです
  3. 「API キーを含める」はオフのまま人に渡すファイルにキーが入らないようにするためです。自分の別の PC に移すときだけオンにします
  4. 「書き出す」を押す保存先を選ぶと md-memo-年月日.mdmemopack が作られ、内訳が表示されます

読み込む(設定 → インポート...)

パッケージを読み込むダイアログの上のほう。パッケージのファイル名と作成日時、「API キーは含まれていません」の表示、設定の区分が並んでいる
選んだパッケージの中身(上のほう)。ここで、入れるものを選びます
  1. パッケージ 選んだファイルの名前、作成日時、書き出した MD-Memo のバージョンです
  2. API キーの有無 「API キーは含まれていません」なら、いまのキーはそのまま残ります。キーが入っているときは、注意の表示になります
  3. 設定 パッケージに入っている区分だけが並びます。反映したいものにチェックを付けます
同じダイアログを下までスクロールしたところ。エージェント定義とスキルに「上書きされます」の印があり、スキルについての注意と、バックアップの案内が出ている
同じダイアログを下までスクロールしたところ。「上書きされます」の印に注目します
  1. 上書きされます 同じ名前のものがすでにあり、読み込むと置き換わります。置き換わるものは、先にバックアップされます
  2. スキルの注意 スキルはエージェントが従う指示です。信頼できる相手のものだけを読み込みます
  3. バックアップの案内 上書きされるエージェント定義とスキルは、先にバックアップされます
  4. 読み込む チェックを付けたものだけを反映します
  1. 「インポート...」を押してファイルを選ぶ.mdmemopack のほか、以前の設定 JSON も読み込めます
  2. 中身を確かめる「上書きされます」の印が付いた項目は、いまあるものを置き換えます。パッケージの API キー欄が空のときは、いまのキーは消えません
  3. 読み込むものにチェックを付ける信頼できない相手のエージェント定義とスキルは、チェックを外します
  4. 「読み込む」を押す設定はすぐ反映されます(一部は再起動後)。エージェント定義とスキルは、次のエージェント実行から使われます
入るもの
  • 設定: 一般・AIモデル・連携・ショートカット・同期・その他(区分ごとに選べます。自動セレクターの設定は「連携」に入ります)
  • エージェント定義: アプリ共通と、プロジェクトの agents.yaml
  • スキル: いまのプロジェクトの skills.claude/skills.gemini/skills.codex/skills にあるもの
入らないもの
  • API キー: 「API キーを含める」をオンにしたときだけ入ります
  • .env ファイル: プロジェクトの .env は対象外です
  • 全体のスキル: ホームフォルダにあるスキルは、選べません
  • ノート本体: パッケージは、設定・エージェント定義・スキルだけです
制限・詳しい仕様

API キーなどの秘密情報

  • 「API キーを含める」がオフのとき、名前に apikeyapi_keyapi-keytokensecretpasswordpasswd のどれかを含む設定項目の値を空にします。Git リモート URL の ユーザー:パスワード@ も取り除きます。
  • エージェント定義は、env: の中にある同じ種類の値を空にします(コメントや並びはそのままです)。安全に書き換えられないときはファイルをそのまま入れ、「秘密情報が残っている可能性があります」と知らせます。共有する前に確かめてください。
  • 空にした件数は、書き出しの完了画面に出ます。

読み込んだあとの動き

  • 設定は、動いているアプリに統合されて、その場で保存されます。テーマ・言語・ツールバー・ショートカットもすぐ切り替わります。チェックを付けなかった区分は変わりません。
  • エージェント定義とスキルは、MD-Memo 自身が書き込みます。config.json を直接書き換えて取り込むことはできません(起動中のアプリが、設定ファイルを持っているためです)。
  • 書き込み先は、アプリ共通のエージェント定義が %APPDATA%\md-memo\agents.yaml(macOS は ~/Library/Application Support/md-memo/agents.yaml)、プロジェクトのものが <プロジェクト>/.md-memo/agents.yaml、スキルが <プロジェクト>/<フォルダ>/<名前> です。構文エラーのあるエージェント定義は、理由つきで読み飛ばします。
  • 上書きされるエージェント定義とスキルは、先に %APPDATA%\md-memo\pack_backups\<日時>\(macOS は ~/Library/Application Support/md-memo/pack_backups/)へ退避されます。プロジェクトの外なので、スキルのフォルダに余計なファイルは増えません。場所は、読み込み後の画面にも出ます。
  • 以前の設定 JSON(1 ファイルに全設定)も読み込めます。対象は設定だけで、API キーが入っていることがあります。書き出しの形式で「JSON(設定のみ)」を選ぶと、同じ形式のファイルができます。
  • 設定の一部は、MD-Memo を再起動すると反映されます。読み込み後の画面に案内が出ます。

「プロジェクト」とは

開いているノートのフォルダ(保存前のノートは、開いているフォルダ、それも無ければスクラップフォルダ)から上へたどり、.md-memoagents.yamlAGENTS.mdskills.git のどれかがある最初のフォルダです。ホームフォルダはプロジェクトとして扱いません(全体のスキルを持ち出さないためです)。決まらないときは、プロジェクトの項目に「プロジェクトが必要」と出て、選べません。

上限と安全

  • パッケージは 50 MB・3000 ファイルまで、1 ファイルは 10 MB まで、展開後の合計は 100 MB までです。設定は 2 MB、エージェント定義は 1 ファイル 1 MB までです。上限を超えるスキルは、注意を出して書き出しから外します。
  • スキルのフォルダにある .env.env.*.env.example などの雛形は入ります)、.gitnode_modules__pycache__ フォルダ、シンボリックリンクは入りません。
  • 危険なパス(..・絶対パス・ドライブ文字など)を含むもの、暗号化されたものや壊れたもの、新しい版のパッケージは、読み込めません。目録(マニフェスト)に載っていないファイルは無視します。
  • スキルはエージェントが従う指示で、エージェント定義には MD-Memo が実行するコマンドが入ります。信頼できる相手のものだけを読み込んでください。

04 玄人向けハック & プログラマブル制御

ひとことで: MD-Memoはエンジニアのためのハッカブルなツールです。ローカルTCP IPC(JSON-RPC 2.0)とCLIサブコマンドで、シェルスクリプトや外部エディタから完全に遠隔操作できます。

UNIX パイプライン連携

ひとことで: ターミナルの出力を | md-memo で流し込むと、今日のスクラップの末尾に追記されます。 設定不要

ミリ秒で起動中のインスタンスに届き、今日のスクラップ(scraps/YYYY-MM-DD.md)の末尾に、タイムスタンプと実行コマンド名付きで追記されます。ウィンドウは自動で前面に出ます。

# コマンドの標準出力を即座にメモへ流し込む
cat build.log | md-memo

# curlの結果をメモに直接記録
curl -s https://api.github.com/zen | md-memo

流し込める上限は、10MBに固定されています。

JSON-RPC 2.0 TCP IPC 仕様

ひとことで: 任意の言語から 127.0.0.1 のTCPソケットを開き、改行区切りの JSON-RPC 2.0 リクエストを送るだけで、MD-Memoを操作できます。
  1. 接続情報を読む起動時に ipc-session.json が書き込まれます(Windows: %AppData%\md-memo\、macOS: ~/Library/Application Support/md-memo/)。中身は {pid, port, token, started_at} です
  2. ソケットを開くポートは 49152 が優先されますが、使用中なら空いているランダムなポートが使われます。ポート番号は必ずこのファイルから読み取ってください
  3. リクエストを送る改行区切りの JSON-RPC 2.0 リクエストを送信します
メソッド パラメータ例 説明
buffer.get {"tab_id": "..."} バッファの内容、ハッシュ(SHA-256 の先頭16桁の16進数)、世代番号、行数を取得。tab_id を省略するとアクティブなタブが対象です。tab_id を受け付けるのは、buffer.getbuffer.get_selectionbuffer.replace_selection の3つだけです。
buffer.set {"content": "...", "expected_hash": "...", "expected_generation": 12} バッファ全体を置換。楽観的ロック(expected_hash または expected_generation が現在の値と合わないと競合エラー)に対応し、Undo履歴を保持。常にプライマリペインのアクティブなタブが対象で、tab_id は無視されます。
buffer.append {"content": "\n- [ ] New Task"} 現在のバッファ末尾にテキストを追加。常にプライマリペインのアクティブなタブが対象です。
buffer.replace {"start_line": 1, "start_col": 1, "end_line": 2, "end_col": 1, "content": "...", "expected_hash": "..."} 指定した行・列の範囲のみを選択的に置換。expected_hash を付けると競合を検知します(expected_generation は受け付けますが、ここでは確認されません)。常にプライマリペインのアクティブなタブが対象です。
buffer.get_selection {"tab_id": "..."} 選択範囲のテキストと、開始・終了位置(UTF-16 のオフセット)を取得。選択がなければエラー -32003(no active selection)になります。
buffer.replace_selection {"content": "...", "tab_id": "..."} 選択範囲を置換(1回のUndoにまとまります)。選択範囲を読み直して確認するため、読み取り後に選択が変わっていると競合エラー -32001、選択がなければ -32003 になります。
tab.list {} 開いている全タブの一覧とアクティブ状態を取得。
tab.switch {"tab_id": "tab_123"} 指定タブにフォーカスを切り替え。
ui.toggle_split {} スプリットエディタの開閉をトグル。
ui.activate {} ウィンドウを最前面にフォーカス。
ui.eval {"expression": "document.title"} アプリ内部のWebViewで任意のJavaScript式を実行して結果を返却。
注意: ローカルからのアクセスは認証されません

セッションファイル内の token は任意です。リクエストにトークン(auth フィールド)を付けたうえでそれが間違っている場合にだけ拒否されます。サーバーは 127.0.0.1 でのみ待ち受けますが、同じPC上で動く任意のプログラムがこれらのメソッドを呼び出せます。アプリ内でJavaScriptを実行する ui.eval も例外ではありません。このポートは、ローカルのすべてのプログラムに開かれているものとして扱ってください。

Headless CLI サブコマンド リファレンス

ひとことで: コマンドラインからMD-Memoを操作できます。ノートの読み書き、タブの切り替え、コマンドの安全性チェックまで、シェルスクリプトから使えます。
起動中のMD-Memoが必要
  • buffer: getsetappendreplacereplace-selection
  • tab: listswitch <id>
  • ui: activatetoggle-spliteval <expr>
単体で動作
  • jevverify など)
  • agentprune
  • 出力をリダイレクトまたはパイプした場合は、--text を付けない限りJSONになります。プレーンテキストで保存するには md-memo buffer get --text > note.md のようにします。
  • --json は、buffer のすべてのサブコマンドで使えます。
  • --tab <id> が効くのは、buffer getbuffer get --selectionbuffer replace-selection の3つだけです。setappendreplace は、常にプライマリペインのアクティブなタブが対象です。
# 1. 現在のバッファを表示(ターミナルではプレーンテキスト、リダイレクト時はJSON)
md-memo buffer get

# 2. メタデータ(ハッシュ、世代番号、文字数、行数など)付きのJSONで取得
md-memo buffer get --json

# 3. ターミナルのストリームでバッファを置換
echo "# 新しいノート" | md-memo buffer set

# 4. 読み取り後に変更されていない場合だけ置換(楽観的ロック)
echo "安全な更新" | md-memo buffer set --expected-hash a1b2c3d4e5f60718

# 5. バッファの末尾に追記
echo "- [ ] 新しいタスク" | md-memo buffer append

# 6. 特定の範囲だけを置換(行:桁、どちらも1始まり)
echo "置換テキスト" | md-memo buffer replace --start 2:1 --end 2:10

# 7. 選択範囲だけを表示。選択がなければ終了コード1、標準エラーに "no active selection"
md-memo buffer get --selection
md-memo buffer get --selection --json
#   -> {"text": "...", "start": 12, "end": 48}
md-memo buffer get --selection --tab tab_2

# 8. パイプで渡したテキストで選択範囲を置換(1回のUndoにまとまる)
#    (読み取り後に選択範囲が変わっていた場合はconflictエラーで拒否されます)
cat formatted.txt | md-memo buffer replace-selection

# 9. コマンドをASTガードレールで検証(終了コード0 = 安全)
md-memo jev verify "git status && npm test"
# [SAFE] Command passed AST validation: git status && npm test

# 10. ブロックされたコマンドは終了コード1で終了。--json なら判定をJSONで出力
md-memo jev verify --json "rm -rf /"
# {
#   "isSafe": false,
#   "reason": "破壊的コマンド \"rm\" は安全基準により実行を拒否されました (Destructive command blocked)",
#   "command": "rm -rf /",
#   "rule": "destructive",
#   "subject": "rm"
# }

# 11. ガードの厳しさをモードで選ぶ: strict(既定。誰もレビューしないワンクリック経路向け)、
#     reviewed(実行前に人が確認)、unattended(フック向け)
md-memo jev verify --mode strict "sudo rm -rf /"
# -> ブロック(終了コード 1)。どのモードでも同じ結果です
md-memo jev verify --mode reviewed "git status"
# -> 安全(終了コード 0)

# 12. Markdownファイルを、クエリに関係する部分だけに絞り込む
md-memo agent prune --query "ログインのバグ" --file notes.md
制限・詳しい仕様(jev verify の終了コードとモード)
  • jev verify [--mode strict|reviewed|unattended] <cmd> は、GUIの実行ゲートと同じ、決定論的でローカル完結の常時稼働AST解析を使っています。外部には何も送信されません。
  • 終了コード: 0 安全、1 ブロック、2 警告(破壊的とは断定できないが、ガードが安全を保証できない)。
  • モード: モードはルールそのものを変えるのではなく、誰が見ているかによって判定の重みづけを変えます。strict(既定)は誰もレビューしないワンクリック経路向け、reviewed は実行前に人が確認する前提、unattended はフック向けです。
  • sudo rm -rf / のようなコマンドは、どのモードでもブロックと判定されます。

AI エージェントに設定を任せる

ひとことで: APIキー、モデル、agents.yaml、環境変数などの設定は、Claude Code などのAIエージェントに頼めます。下の依頼文を貼るだけです。 エージェントCLIが別途必要
あなたMD-Memoを終了し、バックアップを取る
エージェントに依頼下の依頼文を渡す
設定ファイルを編集編集したあと、構文を検証する
MD-Memoを再起動あなたが通常どおり起動する
動作確認機能ごとに確かめて報告

どのファイルを、誰が、いつ編集するか

ファイル 場所 反映されるタイミング 編集する人
config.json
アプリの設定(キー・モデル・ショートカットなど)
Windows: %APPDATA%\md-memo\
macOS: ~/Library/Application Support/md-memo/
MD-Memoを再起動したとき。起動時に読み込まれ、設定画面の保存のたびに全体が書き直されます エージェント。MD-Memoを完全に終了している間だけ
agents.yaml
エージェント・記法・別名(aliases)・ひな形(snippets)の定義
プロジェクトごと: <スクラップフォルダ>/.md-memo/agents.yaml
または、アプリの設定フォルダ
次のスロット実行のとき(記法・別名・ひな形の一覧への反映は、MD-Memoの再起動のあと)。構文エラーがあると、エラーは出ずに既定の設定に戻ります エージェント、またはあなた(起動中でも可)
プロジェクトの .env
エージェントCLIのキー用
プロジェクトルート(エージェントに任せるを参照) スロットを実行するたび。エージェントの実行時に読まれるenvファイルは、これだけです エージェント
環境変数 OSのユーザー環境変数 設定したあとに起動したプロセスから(詳しくは下の折りたたみ) エージェント(依頼文で頼んだとき)

動いている設定を別の PC に移すときは、エージェントに任せず、設定パッケージ(設定のエクスポート / インポート)を使うのが確実です。

  1. MD-Memoを完全に終了し、ファイルをバックアップするWindowsは、トレイアイコンから終了します(✕で閉じても常駐したままです)。macOSは Cmd+Q。バックアップにはAPIキーが入るので、設定フォルダの中に置きます
  2. 下の依頼文を、エージェントに渡す先に skills/md-memo/SKILL.md を読むよう伝えます(下のリンク先)
  3. エージェントが編集して、検証するJSONとYAMLの構文チェックまで行ってもらいます
  4. MD-Memoを起動するスタートメニュー、Finder、トレイから、通常どおり起動します
  5. エージェントが、機能ごとに確認する確認できたこと・できなかったことを報告してもらいます

依頼文 1: Geminiをまとめて設定する(画像OCR・音声入力・Mermaidの画像化)

MD-Memo を Gemini 向けに設定してください(画像 OCR、音声入力、Mermaid の画像化)。
まず skills/md-memo/SKILL.md と skills/md-memo/references/setup-guide.md を読んでください。
config.json を編集する前に、MD-Memo を終了する(トレイ → 終了)ようこちらに依頼し、バックアップを取ってから、渡す Gemini キーは vision.apiKey にだけ入れてください(音声と画像はそれを引き継ぎます)。
音声は voice.model を gemini-3.5-transcribe、apiStyle は auto、languageCodes は ["ja-JP"] に、画像は image.model を gemini-3.1-flash-lite-image にしてください。
これらの機能に必要な環境と前提条件(ネットワーク、マイクの許可、general.pasteImageOcr など)も確認し、足りない設定を整えてください。
インストールや OS のプライバシー設定の変更が必要なときは、実行する前にコマンドを私に見せて、許可を得てください。
キーは表示もコミットもしないでください。
再起動後に各機能をチェックリストで確認し、確認できたこと・できなかったことを報告してください。

依頼文 2: エージェントを追加・変更し、APIキーをプロジェクトの .env に入れる

MD-Memo の agents.yaml(設定フォルダ直下のグローバルなもの、またはスクラップフォルダの .md-memo/agents.yaml)に、<エージェント名> を追加してください。
まず skills/md-memo/SKILL.md と skills/md-memo/references/setup-guide.md を読んでください。
バックアップを取り、既存のエージェント、記法(slot_profiles / recipes)、別名(aliases)、ひな形(snippets)はすべて残してください。
<コマンド> --help でフラグを確認し、権限確認をスキップするフラグは付けないでください。
そのエージェントの API キーは、プロジェクトルートの .env に書いてください(KEY=value の形式、UTF-8 の BOM なし)。キーは表示しないでください。
スクラップフォルダで Git 同期が有効なら、先に .env を .gitignore に入れてください。
YAML を検証し、記法(slot_profiles / recipes)を変えた場合は MD-Memo の再起動が必要だと伝えてください。

依頼文 3: 全機能の前提条件を点検し、足りない環境変数と設定を整える

MD-Memo の各機能の前提条件を確認し、足りない環境変数と設定を設定してください。
まず skills/md-memo/SKILL.md と skills/md-memo/references/setup-guide.md を読み、setup-guide.md の (e)「機能ごとの前提条件と確認手順」の表にある機能をひとつずつ、必要なもの(インストール、キー、環境変数、設定)が揃っているか確認してください。
足りないものは、適切な場所に設定してください。config.json は MD-Memo を終了してから(バックアップ必須)、エージェントの定義は agents.yaml、エージェント CLI のキーはプロジェクトの .env、それ以外は OS の環境変数です。
MD-Memo 自身の LLM キーは config.json にだけ書きます(GEMINI_API_KEY などの環境変数は MD-Memo には読まれません)。
インストールや、OS のプライバシー・ファイアウォールの設定変更が必要なときは、実行する前にコマンドを私に見せて、許可を得てください。
キーは表示もコミットもしないでください。
最後に、機能ごとに「確認できた/できなかった/未確認」を表にして報告してください。
機能ごとの前提条件と確認方法(一覧表)

エージェントは、この表を skills/md-memo/references/setup-guide.md の (e) から読みます。人が手で確認するときにも使えます。

機能 必要なもの 設定キー・変数 確認方法
テキストLLM
(Ctrl+L・Ctrl+Enter の LLM 指示・Alt+C・プリセット)
ローカルは、Ollamaと ollama pull qwen2.5:latest(または 設定 → AIモデル の「Gemma 4 導入」)。クラウドは、GeminiまたはOpenAI互換のキー text.baseUrltext.modeltext.apiKey(Ollamaはキー不要) ローカル: curl http://127.0.0.1:11434/api/tags が200を返し、モデルが並ぶ。画面: 文を選んで Ctrl + L、「英訳して」→ Enter で下に英訳が入る
ゴーストテキスト 上と同じ(小さなモデル推奨) autocomplete.* 2文字以上入力して0.5秒止めると薄い提案が出る。ステータスバーが「予測: ON」で、Tab で採用できる
Ollamaの自動起動・停止 MD-Memoは、127.0.0.1:11434 宛の要求で /api/tags が失敗するとOllamaを起動します。text と autocomplete を 11434 から外して設定を保存すると、Ollamaを停止します(その人のOllamaのプロセスがすべて止まります) なし ollama list(インストールによっては、ollama コマンドだけでOllamaアプリが起動します)
画像OCR
(画像のCtrl+V・Mobile Dropの写真)
Geminiのキー、またはローカルのビジョンモデル(ollama pull qwen2.5-vl:latest と、vision.baseUrlhttp://localhost:11434 に) vision.*general.pasteImageOcr: true 画像だけをコピーして Ctrl + V。Markdownに変わる
音声入力 Geminiのキー(voice.apiKey、なければ vision.apiKey)、モデル gemini-3.5-transcribe、マイクの許可 voice.*(環境変数は不要) Ctrl + Shift + R でマーカーが出る。話して、もう一度押すかしばらく黙ると、テキストになる
マイクの許可 初回の録音で、WebView2が許可を求めます。Windowsは、設定 → プライバシーとセキュリティ → マイク で、デスクトップアプリを許可します。macOSは、システム設定のマイクで許可します(macOSでの動作は未検証) なし 「マイクを使用できませんでした」と出たら、許可が拒否されたか、OSが止めています。%LOCALAPPDATA%\md-memo\webview は、ユーザーの了解なしに消さないでください
クリップボードの許可 Markdown 化をオフにしたときの Ctrl + Shift + V のフォールバックと、Mobile Dropの「PCからのテキスト」は、非同期クリップボードを読みます。初回にWebView2の確認が出ることがあります なし リッチHTMLをコピーして Ctrl + V。Markdownになり、トーストが出る
Mermaidの画像化 Geminiのキー、ネットワーク image.apiKey(なければ vision.apiKeytext.apiKey)、image.modelimage.aspectRatioimage.resolution ```mermaid ブロックにカーソルを置き、コマンドパレットの「図解: MermaidからGeminiで画像生成」。画像リンクになる(先にノートを保存する)
Mermaidをテキストから作る テキストLLM text.* テキストを選び、コマンドパレットの「図解: 選択範囲をMermaid図に変換」
コマンドバー(Ctrl+E) パイプで使うツールがPATHにあること(jqsorttrduckdb など) なし 行を選び、sort -u → Enter。コマンドはアプリの作業ディレクトリで実行される
コマンドバー AI モード(Ctrl+E → Tab) テキストLLM(または cli.* cli.model など 「list files here」→ Enter でコマンドがバーに入る。読んでから Enter で実行
スロットのエージェント 使う各CLI(claudecodexollamaagy など)のインストールとログイン。GUIアプリからPATHが見えること キーは <プロジェクトルート>/.env、またはCLI自身のログイン 設定 → 連携 に、選択中のエージェントが使えるかが出る(PATHの検索。30秒キャッシュ)。{{ say hello }}Ctrl + Enter で結果が入る。エージェント起動失敗 は、GUIのPATHにコマンドがないという意味
自動セレクター
(Ctrl+Enter)
LLM への指示にはテキストLLM(この表の1行目)、エージェントへの依頼にはエージェントCLI(上の行)。コマンドは、ほかの設定なしで動きます(コマンドバーと同じ安全チェックを通ります) autoSelector.enabledautoSelector.agentConfirm(どちらも既定は true)。agents.yamlaliasessnippets 「上のチェックリストを英語に翻訳して」と1行書いて Ctrl + Enter。行が [[ @llm ... ]] になり、下に結果ブロックが入る。「テストを実行して」は {{ @エージェント名 ... }}(既定のエージェント)に書き換わって止まり、もう一度 Ctrl + Enter で実行される
アクション候補 ローカル規則なら不要(外部エンジンは任意) action.* 文章のあるノートで Ctrl + J。カードが最大3枚出る。sh カードはアプリの作業ディレクトリで実行される
Git同期 git がPATHにあること。空のリモートリポジトリ。対話なしで通る認証(資格情報マネージャかSSHキー。入力を求める画面は無効) scraps.scrapDirscraps.gitSyncEnabledscraps.gitRemoteUrlscraps.gitRemoteBranch git -C <scrapDir> remote -vgit -C <scrapDir> ls-remote --heads origin。画面: 設定 → 同期 で「接続テスト」→「連携 / 初期化」。先に .env.gitignore
Mobile Drop(同じLAN) スマホとPCが同じLAN(AP分離やVPNがないこと)。求められたら、Windowsのファイアウォールをプライベートネットワークで許可 なし Ctrl + Shift + U でQRコードと http://<LANのIP>:<ポート>/?token=... が出る。写真には vision.*、音声には voice.* が要る
Mobile Drop(インターネット経由) cloudflared を自分でインストール(Windows: winget install --id Cloudflare.cloudflared -e、macOS: brew install cloudflared)。ボタンを押した時点で探すので、再起動は不要 なし cloudflared --version。ダイアログのトンネルのボタンで、15秒以内に https://...trycloudflare.com/?token=... が出る。通信はCloudflare経由なので、ユーザーが求めたときだけ
グローバル呼び出しキー なし shortcuts.globalSummon ほかのアプリから押す。起動時にほかとぶつかっても、エラーは出ません。設定画面で変えてOSに拒否されると、元に戻ってトーストが出る
Windowsの前提 Microsoft Edge WebView2 ランタイム(ないとMD-Memoは起動できません) なし アプリを起動する
macOSの前提 macOS 10.15 以降。Appleの署名がないビルドの初回は、右クリック → 開く、または xattr -dr com.apple.quarantine "MD-Memo.app" なし トレイはない設計です。Dockアイコンとホットキーで、ウィンドウを戻します
環境変数について(読まれるもの・読まれないもの)
  • MD-Memo自身が読む変数: TYPESAFE_API_KEY(なければ JEV_API_KEY)、OPENROUTER_API_KEY(CLIだけ)、JEV_MODELJEV_API_URL、そして PATH など。
  • 読まれない変数: GEMINI_API_KEYGOOGLE_API_KEYOPENAI_API_KEYANTHROPIC_API_KEYOLLAMA_HOST。MD-Memo自身のLLM機能のキーとURLは、config.json からだけ読みます。これらの変数が役に立つのは、それを読む外部のエージェントCLIだけです。
  • GUIアプリは引き継ぎません: スタートメニューやFinderから起動したアプリは、シェルのプロファイルの変数を引き継ぎません。macOSでは、MD-Memoが PATH だけを補正します。ほかの変数は、プロジェクトの .env を使ってください。
  • Windowsで保存する: setx NAME "値" でユーザー環境変数に保存し、MD-Memoをトレイから完全に終了して、起動し直します。
  • おすすめの分け方: エージェントのキーは <プロジェクトルート>/.env、MD-Memo自身のキーは config.json、OSの環境変数はPATHの追加とJev関連だけ。
エージェントにさせてはいけないこと
  • APIキー、config.json(とそのバックアップ)、.envsession.json を、表示・ログ出力・チャットへの貼り付け・コミットすること。キーは「set (...末尾4文字)」のように伏せます。
  • 2つ目のMD-Memoを起動すること、プロセスを強制終了すること。終了はあなたがトレイから行います。
  • MD-Memoの起動中に config.json を編集すること。キーを消して「リセット」せず、明示的な既定値を書きます。
  • md-memo ui eval で設定を読んだり、window.backend.* を呼んだりすること。
  • スクラップフォルダを、リポジトリ・ホームフォルダ・ドライブの直下に向けること。.env を、git-ignore なしでスクラップフォルダに置くこと。
  • 権限確認をスキップするフラグ(--dangerously-skip-permissions など)をエージェント定義に足すこと。--help で確かめていないCLIを登録すること。
  • あなたの依頼なしに、Cloudflareトンネルを開始する、cloudflared をインストールする、OSのマイク・ファイアウォール・プライバシー設定を変える、ollama コマンドを実行すること。
  • 確認の手順を踏まずに、「動きました」と言い切ること。確認できなかったことは「未確認」と書かせます。

エージェントに読ませるフォルダは skills/md-memo です。依頼するときは、まず SKILL.md を読むよう伝えてください。このフォルダを、お使いのエージェントのスキルフォルダにコピーしても使えます。

外部ツール・エディタとの連携レシピ

ひとことで: Neovim、PowerShell、tmux などから、コマンド1行でMD-Memoへテキストを送れます。

Neovim / Vim から現在のバッファをMD-Memoへ送信:

" .vimrc / init.vim
command! MDMemoSend :w !md-memo

PowerShell からクリップボード内容を追記:

Get-Clipboard | md-memo buffer append

tmux のペイン出力をスクラップへダンプ:

tmux capture-pane -p | md-memo

用語集(内部名称と機能の対応)

リリースノートや設定ファイル、CLIのサブコマンドには、開発上の内部名称がそのまま残っています。普段の操作でこれらを覚える必要はありませんが、見かけたときのために意味をまとめておきます。

用語 どの機能のことか 意味
Jev アクション候補 TypeSafe AI が提供する外部の判定モデルの名前です(md-memo に内蔵されているものではありません)。設定 → 連携 → 提案(アクション候補)で OpenRouter か TypeSafe の API キーを入力したときだけ使われます。文章は書かず、md-memo に内蔵の候補を並べ替えます。それ以外は内蔵のローカル規則で動作します。md-memo jev verify のように CLI のサブコマンド名としても使われていますが、jev verify(AST 検証)は完全にローカルで動きます。
Slot(スロット) エージェントに任せる ノート本文の {{ }} などの記法そのもの、およびそこからエージェントを呼び出す仕組みのことです。設定ファイル内の slot_profiles はこの記法の定義です。
自動セレクター(Auto selector) 任せる|自動セレクター Ctrl + Enter で、行の内容から動作を判定する仕組みのことです。LLM への指示・エージェントへの依頼・コマンドのどれかに振り分けます。判定は、ネットワークを使わない決まりごとで行います。{{ を打つと出るクイックセレクターとは別のものです。
結果ブロック(result block) 自動セレクター 指示行の下に入る結果のことです。<!-- md-memo:res ... --><!-- /md-memo:res --> の2つのコメント行ではさまれています。実行中は、1行の目印 <!-- md-memo:run ... --> が入ります。
スニペット(snippet) 自動セレクター / コマンドパレット LLM・エージェント・コマンドの「タスクのひな形」のことです。{{ のクイックセレクター、コマンドパレットの「タスクのひな形を挿入」、;sum のような短縮語 + Tab から挿入します。agents.yaml の snippets: に自作できます。
別名(alias) エージェントに任せる {{ @cc 指示 }} のように、エージェントを短い名前で呼ぶための別名のことです。agents.yaml の aliases: に書きます。大文字と小文字は区別しません。
System 1 アクション候補 「考え込まずに即座に出す」高速推論モードを指す呼び名です。人間の直感的な思考になぞらえた命名で、候補の提示が待たされない理由でもあります。
3-Beam アクション候補 候補を1つに絞らず、同時に3つまで提示する方式のことです。画面に出る3枚のカードがこれにあたります。
MAP-Elites アクション候補 3枚のカードが似たもの同士にならないよう、性質の異なる候補を選び分けるアルゴリズムです(たとえば「実行」カードと「任せる」カードが並びます)。どの種類が出るかは、書いている内容や、外部モデルを設定しているかどうかで変わります。
AST ガードレール アクション候補 / md-memo jev verify シェルコマンドを実行する前に構文として解析し、破壊的コマンドやシステム領域への書き込みなどを検出したら実行を拒否する仕組みです。既知の危険パターンを対象とした防御であり、すべての危険を検知できるわけではありません。
Ghost Diff エージェントに任せる エージェントの結果が差し込まれた直後に、エディタの左端へ太さ3pxの琥珀色の線を、設定した時間だけ表示する仕組みのことです。変更された行だけに印が付くわけではありません。線が出ている間と、その後の1秒間は Esc で取り消せます。
Hover Peek タスクパネル 実行中のエージェントが出力した最新の1行を覗き見る表示のことです。