mcpField
C
Coders Talk

Coders Talk

リモート
coders.talk開発ツール16 日前に更新
リポジトリ公式サイト

Coders Talk について

Coders Talkは現在KeepPlainという名称で、Claude Code、Codex、Cursor、Piの利用者向けです。プラグインはセッションを非公開の下書きとして保存し、エージェントから他の開発者のセッションやプレイブックを検索できるようにします。

主な機能

  1. 01コーディングセッションを非公開下書きとして保存
  2. 02セッション記録の確認と公開
  3. 03エージェントからセッションライブラリを検索
  4. 04公開済みプレイブックをスキルやルールとして適用
  5. 05CLIによるセッションの選択と管理
  6. 06Claude Code、Codex、Cursor、Piに対応

活用シーン

  1. 01公開前にエージェントのセッションを確認する
  2. 02類似タスクへの他の開発者の対応を調べる
  3. 03公開済みプレイブックをリポジトリに追加する

MCP 対応

KeepPlainはMCPサーバーを通じて、エージェントにセッションライブラリへのアクセスを提供します。CodexやCursorなどのクライアントが接続でき、プラグインは対応エージェント向けにMCPも設定します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://coders.talk/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

Claude Code、Codex、Cursor、Pi 向け KeepPlain

現在利用中の Claude Code、Codex、Cursor、Pi のセッションを KeepPlain にドラフト Build として送信します。重要だったプロンプト、介入、失敗を記録し、生ログはその一段下に保存します。プラグインが公開することはありません。ドラフトは非公開です。あなた自身、またはセッションがチームのリポジトリのいずれかで実行された場合はチームだけが見ることができます。サイトですべての記録を確認し、公開したい場合はそこで公開します。

反対に、プラグインはエージェントに KeepPlain ライブラリを提供します。複雑なタスクに取りかかる前や、何度か失敗した後に、ほかの開発者が似たことをしたセッションと、そこで何がうまくいかなかったかを検索できます(エージェント内のライブラリを参照)。また、/keepplain:use を使うと、公開済みの Build のプレイブック、つまりそのセッションで苦労して学んだことを、スキルまたはルールとしてリポジトリに追加できます(プレイブックを参照)。

インストール

Coders Talk からの移行

KeepPlain は 2026 年 10 月まで Coders Talk という名称でした。このプラグインは以前のものを引き継がないため、先に古いものを削除してください。そうしないと、古いフックと新しいフックが並行して実行されます。

  1. coders-talk disable を実行すると、Claude Code、Codex、Cursor、Pi から削除されます。
  2. ~/.coders-talk と、シェルのプロファイル内の # Coders Talk CLI の行を削除します(Windows では、PATH にある %USERPROFILE%\.coders-talk\bin)。
  3. Claude のプラグインディレクトリから Coders Talk を追加した場合は、Customize → Plugins で削除します。Coders Talk デスクトップアプリの場合は、Settings → Apps で削除します。
  4. 新しいプラグインは古いブロックをそのまま残します。CLAUDE.md または AGENTS.md の `` ブロックと、Git フックの # >>> coders-talk ブロックを削除してください。

その後、以下の手順でインストールし、/keepplain:login(または keepplain login)で再度サインインします。

ターミナルから
curl -fsSL https://keepplain.com/install.sh | sh        # macOS and Linux
irm https://keepplain.com/install.ps1 | iex              # Windows, in PowerShell
keepplain login

これにより、Node.js が不要な単一ファイルの keepplain が ~/.keepplain/bin にインストールされ、そのフォルダーが PATH に追加されます(シェルの rc ファイル。Windows ではユーザー PATH)。インストーラーは、このリポジトリの リリースからお使いのプラットフォーム用のファイルを取得し、リリースの SHA256SUMS と照合して検証します。sudo や管理者権限は不要です。KEEPPLAIN_VERSION=0.16.0 を指定するとそのバージョンがインストールされ、KEEPPLAIN_NO_MODIFY_PATH=1 を指定すると PATH は変更されません。

keepplain login を実行すると、ブラウザーで Connect を押すまでターミナル上で待機します。SSH 経由の場合は、別の場所で開くためのリンクとコードが表示されます。keepplain update は、SHA256 を検証した後、最新リリースのファイルに置き換えます。コマンドを入力すると、新しいリリースがある場合にその旨が 1 行で通知されますが、通知は 1 日に最大 1 回です。そのためにネットワークを待つことはなく、フックが確認することもありません。KEEPPLAIN_NO_UPDATE_CHECK=1 を指定すると、この確認を無効にできます。

続いて keepplain enable を実行すると、Claude Code、Codex、Cursor、Pi が接続されます。検出した内容と実行する内容を説明して確認を求めた後、各エージェント固有のプラグインシステムを通じてプラグインをインストールします。プラグインを ~/.keepplain/plugin に配置し、そのフォルダーをローカルマーケットプレイス keepplain-local として追加します(claude plugin marketplace add、claude plugin install keepplain@keepplain-local、codex plugin marketplace add、codex plugin add)。Pi のパッケージは、そこから pi install でインストールします。Cursor にはプラグインをインストールするコマンドがないため、プラグインを構成するファイルを ~/.cursor に追加し、既存のファイルと共存させます。フックは hooks.json、コマンドは skills/keepplain-* 内のスキル、ライブラリは mcp.json に配置されます。変更されるのはプラグインのファイルだけです。ファイルを読み取れない場合(コメントや構文エラーなど)は変更せず、追加すべき行を表示します。以下の手順でインストールするものと同じプラグインですが、フックとスキルは keepplain を絶対パスで呼び出すため、Node.js は不要で、シェルの PATH が設定されていなくてもデスクトップアプリから利用できます。その過程で、次の処理が行われます。

  • GitHub マーケットプレイスのプラグイン(keepplain@keepplain)、または Pi の git パッケージ(pi install git:github.com/keepplain/keepplain-plugin)を置き換えます。置き換えないと、フックが二重に実行されます。
  • Claude のプラグインディレクトリにあるプラグイン(keepplain@synced)はそのままにし、その隣の Claude Code には独自のコピーをインストールしません。そこにある別のコピーは削除されます。ディレクトリ内のコピーは claude.ai 上で削除され、disable では削除されません。
  • 手動で追加した KeepPlain MCP サーバー(claude mcp add、Codex の config.toml 内の mcp_servers、~/.cursor/mcp.json のエントリ)を見つけて削除するか、そのまま残し、そのエージェントには独自のサーバーを含めずにプラグインをインストールします。
  • 検出したエージェントごとに、自動モードについて一度だけ尋ねます(指定しない限りオフです)。Codex は、/hooks でフックを信頼した後にのみフックを実行します。enable を実行しても、信頼の設定は行われません。Cursor と Pi ではその必要はありません。
  • git リポジトリ内では、KeepPlain の git フックをリポジトリに配置するかどうかを尋ねます(すでに配置されている場合を除き、いいえが初期値です。Git フックを参照してください)。
  • 過去 30 日間のセッションをプライベートな下書きにインポートするかどうかを一度だけ尋ねます(指定しない限り、はいが初期値です。過去のセッションを参照してください)。

keepplain enable --yes は確認なしで続行します。回答には、--agent=claude-code,codex,cursor,pi、--auto=off|on|team|push、--mcp=remove|keep、--git-hooks、--no-git-hooks、--no-trailers、および --import-past(--import-days=N と併用)を指定できます。--import-past を指定しない場合、何もインポートされません。keepplain status は、ファイル、サインインの状態、各エージェントの KeepPlain プラグインと自動モード、および現在いるリポジトリの git フックを表示します。keepplain disable は、Claude Code と Codex からプラグインとそのマーケットプレイスをアンインストールし、Pi のパッケージを削除し、~/.cursor に書き込んだフック、スキル、ライブラリエントリを削除し、enable によって配置されたすべてのリポジトリから git フックを削除します。サインイン、設定、ファイルはそのまま残ります。keepplain update は新しいバージョンでプラグインを再配置し、各エージェント上で更新するため、プラグインのバージョンは常にファイルのバージョンと一致します。

セッションを開き直さずに送信するには、セッションを実行したフォルダーで keepplain sessions を実行します(または、どこからでも keepplain sessions --all を実行すると、すべてのプロジェクトの過去 30 日間のセッションが対象になります)。そのフォルダーで実行された Claude Code、Codex、Cursor、Pi のセッション(リポジトリの最上位で実行されたものも含む)が、新しい順に一覧表示されます。それぞれのプロンプト数、最初のプロンプトの冒頭、送信済みかどうかも表示されます。keepplain build 2 を実行すると、/keepplain:build と同じ概要とプライバシーチェックが表示され、[y/N] と尋ねてから送信します。keepplain build だけを実行すると最新のセッションが対象となり、セッション ID も使用できます。同じオプション(--private、--team=<slug>、--keep=<numbers>、--continues=<link>)を指定できます。これはターミナルでのみ実行されます。エージェントもスクリプトも質問に回答できず、--yes もありません。スクリプトからは、keepplain preview <id> と keepplain send <id>(ほかのエージェントには --agent=codex、--agent=cursor、または --agent=pi を指定)で、2 つの手順を実行できます。

組織が claude.ai に追加した KeepPlain コネクターはコンピューター上では表示されないため、enable では検出できません。その後、エージェントがライブラリのツールを二重に表示する場合は、/mcp で 2 つのサーバーのうち一方をオフにしてください。

プログラムは --json を指定してコマンドを実行します。status、sessions、preview、send、discard、login、whoami、logout、enable、disable、auto、rules、nudge、privacy、import-past は、1 行に 1 つの JSON オブジェクトを出力します。処理時間の長いコマンドは各手順につき {"event": …} を出力し、失敗時には標準出力に {"error": "…"} を出力します。プレビューの検出結果は番号と種類のみで示され、値は表示されません。login --json は、コードの有効期限が切れるまで Connect を待機します。

デスクトップアプリ

KeepPlain アプリは、macOS と Windows で同じコマンドを実行するためのウィンドウです。3 ステップのウェルカム画面(検出されたエージェント、サインイン、enable。過去のセッションのインポートはチェックマーク付きで、デフォルトで有効)、エージェントごとのスイッチ、最後に送信したセッション、各プロジェクトの最近のセッション(sessions --all。送信のたびに確認画面が表示されます)、設定が含まれています。リリース済みの keepplain ファイルを同梱し、ファイルが存在しない場合や古い場合は ~/.keepplain/bin にインストールします。

Claude のプラグインディレクトリから

KeepPlain は Claude のプラグインディレクトリに登録されています。claude.ai または Claude デスクトップアプリで、Customize → Plugins を開き、KeepPlain を見つけて Add を押してから、新しいセッションを開始してください。デスクトップアプリは Node.js 20 以降でプラグインのスクリプトを実行します。同じアカウントでサインインしていれば、ターミナルの Claude Code でも keepplain@synced として利用できます。その後は、以下のように /keepplain:login を実行します。コピーは 1 つだけにしてください。keepplain enable はこのプラグインをそのまま残し、Claude Code に独自のプラグインを追加しませんが、下記のマーケットプレイスからも追加すると、フックが二重に実行されます。

エージェントから
  1. Claude Code で:

    /plugin marketplace add keepplain/keepplain-plugin
    /plugin install keepplain@keepplain
    
  2. アカウントに接続します:/keepplain:login。ブラウザーで KeepPlain が開きます。ページに Claude Code と同じコードが表示されていることを確認して、Connect を押してください。プラグインはサイトからトークンを直接受け取り、あなたのみが読み取れる ~/.keepplain/credentials.json に保存します。コピーするトークンはなく、チャットを経由することもありません。サインインリクエストには、リクエスト元のプログラム(Claude Code、Codex、Cursor、Pi、KeepPlain CLI のいずれか)とそのバージョンだけが記録され、コンピューターの情報は記録されません。サイトでは Settings → Agent plugins のその名前の下にトークンが表示されます。

Node.js 20 以降が必要です。それ以外は必要ありません。

Codex
codex plugin marketplace add keepplain/keepplain-plugin
codex plugin add keepplain@keepplain

新しいセッションを開始し、$keepplain:login と $keepplain:build を実行します(以下と同じコマンドですが、/ の代わりに $ を使います)。ライブラリを使う場合は、ターミナルで codex mcp login keepplain も一度実行してください。Codex は、プラグインのコマンドをサンドボックスの外で実行するか確認します。KeepPlain に接続するネットワークと、サインインに使うホームフォルダーへのアクセスが必要なためです。セッションは ~/.codex/sessions(または CODEX_HOME)にある CODEX_THREAD_ID から特定され、開始時の HEAD は rollout の session_meta から取得されるため、Codex にフックは必要ありません。Codex がプラグインのフックを実行するのは自動モードの場合(「自動モード」を参照)のみで、/hooks でフックを信頼した後に限られます。

Cursor

keepplain enable(上記)が導入方法です。Cursor にはスクリプトからプラグインをインストールする機能がないため、IDE と agent CLI が起動時に読み込むよう、プラグインを ~/.cursor に書き込みます。hooks.json には 4 つのフック(sessionStart、beforeSubmitPrompt、stop、sessionEnd。それぞれ keepplain hook cursor <event> を実行します)、skills/keepplain-<name>/SKILL.md にはコマンド、mcp.json にはライブラリが追加されます。Cursor を再起動する(または「Developer: Reload Window」を実行する)と、Settings → MCP で keepplain の Connect を押し、/keepplain-login と /keepplain-build を入力します。Cursor ではスキル名にコロンを使えないため、以下のコマンドではコロンの代わりにハイフンを使います。

Cursor の会話トランスクリプト(~/.cursor/projects/<folder>/agent-transcripts/<id>/<id>.jsonl)には、プロンプト、回答、ツール呼び出しが含まれていますが、ツールの結果、トークン数、分単位より細かい時刻は記録されません。フックは不足している情報を補います。beforeSubmitPrompt と stop は各ターンの時刻、モデル、各回答のトークン数、各ワークスペースがどの会話に属するかを記録します(~/.keepplain/cursor/ に保存されるのは時刻と数だけで、テキストは保存されません)。そのため、keepplain preview は、フォルダーを指定しなくても、実行されたフォルダーの会話を見つけられます。各ターンで変更された内容は、エージェント自身の編集呼び出しと git スナップショットから取得されます。ウィンドウを閉じたときやクラッシュしたときなど、Cursor が sessionEnd を呼び出さないことがあります。その場合、次の sessionStart が残りの内容を送信します。

Pi

keepplain enable は pi install を使用してインストールします。このファイルを使わずに、このリポジトリから実行する場合:

pi install git:github.com/keepplain/keepplain-plugin

これは Node.js でスクリプトを実行します。Pi 自体が Node.js(22.19 以降)を必要とします。/reload を実行するか、Pi を再起動してから、/keepplain:login と /keepplain:build を実行してください。プラグインは 1 つの拡張機能(pi/extensions/keepplain.js、package.json の pi キーで指定)です。そのコマンドは Pi 自身のプロセス内で実行されるため、セッションには何も記録されません。また、「このセッションを送信しますか?」という質問は Pi 独自のダイアログです。そのイベント(session_start、agent_start、agent_settled、session_shutdown)は、ほかのエージェントと同じフックを実行します。自動モード、git スナップショット、共有の提案です。セッションは Pi が ~/.pi/agent/sessions に保持するファイルです(または、PI_CODING_AGENT_DIR、PI_CODING_AGENT_SESSION_DIR、sessionDir 設定で指定した場所です)。Pi が自身で実行するコマンドに対して行うのと同じように、拡張機能が keepplain にどのファイルかを伝えます(PI_SESSION_ID、PI_SESSION_FILE)。Pi には MCP がないため、拡張機能がライブラリの 3 つのツールを直接登録します。これらは、サインイン情報を使って keepplain mcp-call 経由でサイトに問い合わせます。フォーク(/fork、/clone)は親を示す新しいファイルです。独自の下書きとして送信され、元のファイルにリンクされます。Pi は、信頼済みのプロジェクトでのみ、そのリポジトリ独自の .agents/skills(use がプレイブックを配置する場所)を読み込みます。

1 つのリポジトリ

1 つのリポジトリで 4 つすべてのエージェントに対応します。Claude Code は .claude-plugin/ と skills/ を読み込み、Codex は .codex-plugin/、.agents/plugins/marketplace.json、codex/skills/、codex/hooks.json を読み込みます(マニフェストがそこを指定するため、Codex が hooks/hooks.json を読み込むことはありません。同じスクリプトが --agent=codex で実行されます)。Pi は package.json の pi キーで指定された拡張機能を読み込み、cursor/skills/ には enable が ~/.cursor にコピーするスキルが格納されます。Codex はスキル内の ${CLAUDE_PLUGIN_ROOT} や ${CLAUDE_SESSION_ID} を展開しないため、Codex 用のスキルはスキルファイルからの相対パスでスクリプトを指定し、--agent=codex を渡します。

Claude Code on the web

claude.ai/code のセッションでは、トランスクリプト全体がクラウドマシン内(~/.claude/projects/…)に保存されています。これをお使いのコンピューターに移行すると、最後に圧縮された箇所以降の部分だけが移されるため、そこで /keepplain:build を実行すると、セッションの冒頭を含まない長いセッションが送信されます。ただし、クラウドマシンにはプラグインがインストールされておらず、環境が許可する場合にのみ KeepPlain にアクセスできます。そのため、クラウドセッションでは、環境に何も設定せずに別の方法で送信します。

  1. claude.ai で KeepPlain コネクターを接続します(コネクター設定)。同じコネクターから、エージェントはライブラリも利用できます。コネクターでセッションを送信できるようになる前に接続した場合は、読み取りのみ可能です。いったん切断してから再接続してください(アップロードツールにその旨が表示されます)。
  2. KeepPlain スキルを追加します。最新リリースから keepplain-skill.zip をダウンロードし、claude.ai のスキル設定からアップロードしてください。クラウドセッションでは、claude.ai で有効にしたスキルが自動的に読み込まれます。
  3. クラウドセッションで、「このセッションを KeepPlain に送信して」と依頼します(または、claude.ai アカウントでこのプラグインを有効にしている場合は /keepplain:build を実行します。独自のトークンがないクラウドマシンでは、同じ方法で自動的に処理されます)。スキルはこのプラグインのスクリプトをクラウドマシン内で実行します。スクリプトはセッション(そこにある最新のトランスクリプト)を見つけ、送信される内容とプライバシーチェックの結果を表示して、確認を求めます。次に、コネクターの start_session_upload がサイトのストレージ(Cloudflare R2。クラウドのデフォルトのネットワークリストで許可されています)に15分間有効な一回限りのアップロードリンクを発行し、keepplain send --connector --upload=<link> がセッションを送信して、finish_session_upload がドラフトを作成し、そのリンクを返します。

スキルは node scripts/skill.mjs でビルドされます(dist/keepplain-skill.zip。その中の SKILL.md は web-skill/SKILL.md です)。各リリースにも含まれます。

クラウドマシンのプロキシは、独自の CA を使って TLS の内部を検査します。プラグインは、Node 独自の CA と NODE_EXTRA_CA_CERTS に加えて、SSL_CERT_FILE、REQUESTS_CA_BUNDLE、CURL_CA_BUNDLE、システムストア(Node 22.15 以降)、または Claude Code on the web が保存している ~/.ccr/ca-bundle.crt から CA を信頼します。プロキシによって KeepPlain 自体への接続が拒否される場合、プラグインはその旨を表示し、Claude Code on the web では、どの環境設定を変更すれば接続できるかも示します。

使用方法

コマンドはどのエージェントでも同じで、それぞれの形式で入力します。Claude Code と Pi では /keepplain:build、Codex では $keepplain:build、Cursor では /keepplain-build です。以下の表では最初の形式を使用しています。

コマンド機能
/keepplain:build送信される内容(プロジェクトフォルダー、プロンプト、期間、サイズ)、送信先、プライバシーチェックの結果を表示して確認を求め、送信し、ドラフトへのリンクを表示します。
/keepplain:build --private同じ内容ですが、チームのリポジトリでもドラフトは自分だけのものになります。
/keepplain:build --team <slug>同じ内容ですが、ドラフトはそのチームに送信されます(チームのリンクにある /t/ の後の部分です)。
/keepplain:auto on今後、このコンピューター上のこのエージェントのすべてのセッションは、実行中と終了時に自動で送信されます(「自動モード」を参照)。
/keepplain:auto team同じ内容ですが、送信されるのは、チームが送信を求めているリポジトリでのセッションだけです。
/keepplain:auto off自動送信を停止します。/keepplain:auto だけを指定すると、自動送信が有効かどうかと、最後に送信した内容が表示されます。
/keepplain:auto session on自動モードがオフでも、このセッションだけを自動送信します。session off を指定すると、モードにかかわらず、このコンピューター上でこのセッションの自動送信を無効にします。session だけを指定すると、どちらが適用されているかが表示されます。
/keepplain:loginブラウザーを使ってこのコンピューターを接続するか、接続先のアカウントを表示します。
/keepplain:logoutこのコンピューター上のトークンを削除します(サイトの Settings → Agent plugins から取り消してください)。
/keepplain:lookup <task>KeepPlain ライブラリから、同様のタスクのセッションを検索し、検索結果を表示します。エージェントも自動で検索します(下記を参照)。
/keepplain:use <link>公開済み Build のプレイブックを、このエージェントのスキルとして表示します。全文、適用先、現在のバージョンからの変更点を示し、確認を求めてから書き込みます。他の2つの形式では --as rule または --as prompt、チームのルールでは --team <team> --stack <stack> を指定します(プレイブックを参照)。
/keepplain:rulesこのリポジトリのセッション開始時に適用されるルールとその理由を表示します。スタックと、リポジトリの所有者も確認できます(すべてのセッションに適用されるルールを参照)。on または off でこのコンピューター上のルールを切り替え、--refresh でサイトに問い合わせます。
/keepplain:handoff [agent]このセッションの概要を、このコンピューター上の別のエージェント向けにクリップボードとファイルに保存します。そのエージェントを起動して引き継ぐコマンドも含まれます(別のエージェントで続けるを参照)。on、off、またはパーセント値を指定すると、制限が近づいたときにプラグインが自動で提案するかどうかを設定できます。

同じセッションを再度送信すると、公開するまでそのドラフトが更新されます。

2つのルールがあります。

  • セッションを送信するコマンド(build と auto、およびそれらと併用する login と logout)は、入力したときだけ実行されます。エージェントが自分で実行することはありません(Cursor ではスキルにそのように設定されており、Pi では自分だけが入力できる拡張機能コマンドです)。
  • プレイブックをリポジトリに追加する操作(use)も、入力したときだけ実行されます。ライブラリは、セッションにプレイブックがあることをエージェントに知らせる場合がありますが、エージェントにできるのは、そのことをユーザーに伝えることだけです。
  • ライブラリの検索は、タスクに必要な場合にエージェントが自動で行います(lookup スキルと keepplain MCP サーバーを使用します)。送信されるのはタスクとスタックの短い説明だけで、セッションは送信されません。無効にするには、Claude Code では /mcp、Codex では ~/.codex/config.toml、Cursor では Settings → MCP を使ってください。エージェントでライブラリを使うも参照してください。

分岐したセッション(Claude Code の /branch または --fork-session、Codex のフォーク、Pi の /fork または /clone)は、それぞれ独立したドラフトとして送信されます。プラグインは、分岐元のセッションと、そのセッションを離れた箇所をサイトに伝えます。分岐の Build には分岐であることが表示され、元のセッションの Build へのリンクが追加されます。また、元のセッションの Build にも分岐先へのリンクが追加されます。どちらを先に送信しても、両方がサイトに登録されるとリンクが表示されます。Claude Code は分岐先が引き継いだ行に元のセッション ID を記録し、Codex はロールアウトの session_meta に、Pi は新しいファイルのヘッダーにそれを記録するため、フックは必要ありません。Cursor のトランスクリプトには、会話が分岐されたかどうかは記録されません。 プライバシーチェックで何かが見つかった場合、プレビューには番号付きで表示されます。番号を指定しない限り、その情報は [REDACTED] になります。また、--keep=<numbers> を指定してプレビューを再実行します(お使いのマシンから送信される情報を参照)。

KeepPlain に接続できない場合、またはサーバーエラーが返された場合は、送信手順でブラウザーに keepplain.com/new を開き、準備済みの .jsonl.gz が選択された状態でファイルマネージャーを開いて、リンクとパスを表示します。ファイルをページにドロップしてください。これはプレビューで説明されたものと同じ、チェック済みのファイルです。30 分間保持されるため、サイトが復旧してからもう一度送信しても機能します。それ以降は、次回 keepplain を実行したとき(または次のセッション開始時)に削除されます。KEEPPLAIN_NO_BROWSER=1 を指定すると、ブラウザーとファイルマネージャーは開かず、リンクとパスだけが表示されます。拒否されたトークンやリクエストがそこに送られることはありません。その場合は、もう一度サインインしてください。

自動モード

自動モードは、コンピューター、サイト、エージェントごとに有効にするまでオフです。Claude Code で /keepplain:auto on を実行しても、Codex、Cursor、Pi のセッションは送信されません。その逆も同様です。有効にすると、各セッションは /keepplain:build と同じ方法で、リポジトリがチームのものであればチームのスペースに、そうでなければ自分専用の Builds に、確認なしで送信されます。/keepplain:auto team を指定すると、チームが送信を求めているリポジトリ(チーム設定)のセッションだけが送信され、それ以外は何もマシンから送信されません。チームから送信を求めることはできますが、ユーザーに代わって自動モードを有効にすることはできません。

セッション単位で設定することもできます。/keepplain:auto session on を実行すると、コンピューターの自動モードがオフでも、現在のセッションが on と同じ方法で送信されます。他のセッションには影響しません。/keepplain:auto session off を実行すると、モードにかかわらず、現在のセッションはコンピューターから送信されなくなります。git フックによる push も対象です(すでに送信されたものはドラフトのままです)。この設定はセッションとともに auto-sessions.json に保存されるため、セッションを再開しても設定は維持され、/keepplain:auto off を実行しても消去されません。KEEPPLAIN_AUTO=0 を指定すると、引き続きすべての送信が停止します。

次のフックがバックグラウンドプロセスで送信を行うため、エージェントがアップロードを待つことはありません。

  • Stop(エージェントの回答後):セッションが進行し、前回の送信から 5 分経過している場合、まだ進行中のセッションとして送信されます。ドラフトは最新の状態に保たれ、クラッシュしても失われるのは最大でその間の内容だけです。5 分未満のセッションは、終了時にのみ送信されます。
  • PostToolUse(Claude Code、各ツール呼び出し後):同じ条件をチェックするため、エージェントが 1 時間かけて取り組むターンも、回答後に一度送信されるだけでなく、実行中に送信されます。Claude Code は処理を待たずにフックを実行し(async)、自動モード以外のものは読み込みません。
  • SessionEnd:セッションを終了済みとして、もう一度送信します。Codex では 30 分間操作がないとセッションが終了します。デスクトップアプリでもこれがセッション終了の条件です。
  • SessionStart:終了したという通知がないまま(クラッシュやターミナルを閉じた場合など)、前回の送信後に進行したセッションは、次回の起動時に一度に最大 3 件送信されます。30 分間操作がなかったセッションは終了済みとして、それより新しいセッションは進行中として送信されます。対象となるのは、自動モードが有効な間に自動モードが確認したセッション、またはセッション単位で有効にしたセッションだけです。過去の履歴は対象外で、これは一度限りのインポート(過去のセッション)です。

サイトは、セッションが終了したとき(プラグインが終了を通知したとき、または 30 分間新しい内容がないとき)に、モデルに各時点を尋ねます。その後もセッションが続く場合、タイムラインを自分で変更していなければ、セッション全体を対象に、次の終了時にもう一度尋ねます。進行中のセッションを送信しても費用はかからず、1 日あたりの上限にも含まれません。 Claude アプリでの会話は複数のセッションにまたがることがあります。送信したメッセージを編集したときや、会話を続けたときに、アプリはそれまでの発言を引き継いだ新しいセッションを開始します。プラグインはこの連なりを、最新のセッションの ID を使って 1 つのセッションとして送信し、それより前のセッションを chain として名前に記録するため、サイトでは同じ下書きが更新され続けます。会話がすでに先のセッションに進んでいる場合、あとから送信されたセッションはそのままスキップされます(skipped: the conversation went on in a later session)。

公開されることはありません。すでに公開したセッションはそのまま残ります。送信するたびに ~/.keepplain/auto.log に記録されます。送信または同期された場合は下書きへのリンク、スキップされた場合は理由、失敗した場合はその旨が記録されます。ログには最新の 500 行だけが保持され、30 日より古い行は残りません。~/.keepplain/auto-sessions.json には、自動モードが認識したセッションと、各セッションのどこまでが送信されたかが記録されますが、セッションの内容は保存されません。/keepplain:auto off を実行すると、この記録は削除されます。環境内で KEEPPLAIN_AUTO=0 を設定すると、そのシェルでは自動モードがオフになります。

Cursor では、フックは enable が ~/.cursor/hooks.json に書き込んだもの(sessionStart、stop、sessionEnd、およびターンの記録のみを行う beforeSubmitPrompt)です。信頼する必要はありません。IDE は毎回 sessionEnd を呼び出すわけではないため、サイトは新しい内容が 30 分間ないときにも送信を試みます。また、次の sessionStart で残りを送信します。Pi では、拡張機能が session_start、agent_settled(回答後)、session_shutdown の各フックを実行します。Pi は最後のフックの完了を待つため、終了前にアップロードがバックグラウンドで始まります。

Codex では、フックは codex/hooks.json にあります。Codex がプラグインのフックを実行するのは、信頼した後だけです。/hooks と入力し、KeepPlain の 3 つのフックを信頼してください($keepplain:auto on を実行すると、思い出させてくれます)。Windows では、Codex はフックを PowerShell 経由で実行し、プラグインフォルダーを ${PLUGIN_ROOT} に自動で設定します。Codex CLI が終了すると、フックが開始した処理も終了させるため、セッション終了フックはアップロードを最大 3 秒待ちます。送信できなかった内容は次回の起動時に送信されます。また、新しい内容が 30 分間ない場合にも、サイトが送信を試みます。

過去のセッション

記憶は空の状態から始まります。search_my_work と「なぜこれが変更されたのか」で見つかるのは、サイトにある内容だけです。エージェントには、プラグインを使う前に実行したセッションも引き続き保存されています(Claude Code は ~/.claude/projects に約 30 日間、Codex は ~/.codex/sessions に、Cursor は ~/.cursor/projects に、Pi はセッションフォルダーに保存されています)。そのため、keepplain enable、デスクトップアプリのウェルカム画面、keepplain import-past から、それらをインポートできます。インポートはアカウントごとに 1 回だけ実行されます。サイトは最初のセッションから 14 日分の過去のセッションを取り込み、それ以降はプラグインからインポートを提案しなくなります。

  • 過去 30 日間(--days=N、最大 90 日)のセッションのうち、プロンプトが含まれ、30 分間操作がなく、このコンピューターから送信されておらず、自動モードにも登録されていないもの(sent.json、auto-sessions.json)を探します(auto session off でオフにしたセッションは対象になりません)。プロジェクトごとの件数を表示して、[Y/n] で確認します。ターミナルがない場合は何も尋ねず、明示的に許可しない限り送信もしません。許可するには、keepplain import-past start、import-past --yes、enable --yes --import-past(アプリのチェックボックス)を実行します。import-past --json は、エージェントとプロジェクトごとに検出内容と、サイトがまだ受け付けているかどうかを表示します。
  • 承認すると、自動モードと同じ方法で送信されます(auto-send <id> --past)。同じように内容を簡略化し、このコンピューター上で同じように編集し、privacy.json の語句も適用します。リポジトリにかかわらず、必ず自分のプライベートな下書きに送られます。チームに送られるのは、チームと共有したセッションだけです(後述)。サイトでは trigger=backfill として受け付けられ、送信日時ではなく各セッションの実行日時が記録され、Batch API 経由でラベル付けされます。また、自動モードやチームの枠とは別の、専用の上限(1 日 100 件。チームと一部を共有した後も同じ)が適用されます。内容が空のセッションは通知なしで破棄されます。
  • バックグラウンドで古いものから順に、15 秒に 1 件ずつ送信されます(サイトが受け付ける送信は 1 分あたり 5 件です)。その日の上限に達すると、UTC の午前 0 時まで停止し、次のエージェントセッション開始時、keepplain login の実行時、または keepplain import-past の実行時に再開します。サイトが混雑している場合は 1 分間待ち、アクセスできない場合は 30 分間待ちます。サイトが繰り返し失敗するセッションは 3 回試行してから対象外にします。サイトで受け付けられなくなったサインイン情報の場合は、何も失わず、インポートを keepplain login まで待機させます。複数のセッションにまたがる Claude アプリの会話は、自動モードと同様に 1 つの下書きになります。自動モードは、これらのセッションのいずれも、そこで再開するまで処理しません。
  • セッションのコミットとして扱われるのは、セッション終了までに実行されたものです。実行時に使われたブランチがまだ存在する場合は、そのブランチ上のコミットが対象となり、今日の HEAD までのすべてが対象になるわけではありません。
  • Cursor のトランスクリプトには、どのフォルダーで実行されたかが記録されません。フォルダーは Cursor のワークスペース(その workspaceStorage)から取得するか、Cursor のフォルダー名を示す名前が付いた別のエージェントセッションから取得します。フォルダーを特定できない会話は対象外となり、その旨が件数に示されます。
  • まだサインインしていない場合(login より先に enable を実行した場合)、サインインまで待機してから開始します。
  • チームのいずれかのリポジトリ(サイトのルーティングに使われる GitHub オーナー)で実行されたセッションは、そのチームへの共有を確認します。インポートの確認の直後(またはサインイン前に同意した場合は keepplain login の実行時)に、チームごとにターミナルで 1 回ずつ尋ねます。「これらのセッションのうち 14 件は Acme のリポジトリで実行されました。Acme とも共有しますか?」自動モードがすでにこのコンピューターのセッションをそのチームに送信している(on、または共有を求めるチームの場合は team)うえに、チームが新たな同意を求めない場合のみ、既定で「はい」になります。それ以外は「いいえ」です。デスクトップアプリでは、各項目にチェックボックスを付けた一覧を表示します。共有するセッションはインポート直後にチームへ移動します(POST /api/v1/teams/<team>/sessions)。すでにインポート済みのものは、ただちに移動します。変更された規約に同意していないチームには何も移動しません。import-past teams --json は対象のチームを一覧表示します。import-past share --team=<slug> --stdin は共有する ID を受け取り([] を指定すると、すべてをプライベートなままにします)。後からチームに参加した場合は、対象となる一連のセッションごとに 1 回ずつ、ベルの通知とチームの同意ページで同じ内容が提示されます。

keepplain import-past status は進捗と待機理由を表示し、keepplain import-past stop はインポートを停止します。インポート済みのものは下書きに残ります。~/.keepplain/past-import.json にはインポート対象のセッション(ID、ファイル、フォルダー、プロジェクト名、リポジトリアドレスが含まれ、会話内容は含まれません)と件数が保存されます。リストはインポート終了から 30 日後に削除されます。自動モードと同様に、セッションごとの行が auto.log に記録されます。enable は「いいえ」という回答を記憶し、再度尋ねることはありません。希望する場合は、keepplain import-past を実行すると再度確認できます。

非公開の下書きとチームの下書き

下書きは非公開です。マイビルドに保存され、フィード、検索エンジン、プロフィールには表示されません。KeepPlain のチームに所属していて、チームが指定した GitHub 組織のいずれかのリポジトリでセッションが実行された場合、下書きはチームのスペースに保存されます。そのチームには表示されますが、それ以外の人には表示されません。プレビューには送信前に下書きの保存先が表示されます。--private と --team <slug> で設定を上書きできます。コミュニティへの公開は、サイト上で必ず別途行う手順です。チームの下書きの場合は、チームが許可している場合に限ります。

エージェントで使うライブラリ

このプラグインは、Claude Code、Codex、Cursor に MCP サーバー keepplain(https://keepplain.com/mcp)を提供します。また、MCP がない Pi には、拡張機能と同じツールを提供します。ツールは 3 つあり、すべて読み取り専用です。search_coding_agent_sessions は類似タスクの公開済みセッションを検索し、get_coding_agent_session はそのうちの 1 つを読み込み、find_coding_agent_failures は類似の問題でエージェントが失敗した箇所と、人が行った対応を探します。lookup スキルは、いつこれらを使うか(既知のスタックで重要なタスクに取りかかる前、2、3 回失敗した後、他の人がどう対処したかを尋ねられたとき)、クエリに含めてよい情報と含めてはいけない情報、そして検索結果を他の人の経験として扱うことをエージェントに伝えます。確認を求めずに、検索結果にあるコマンドを実行することはありません。セッションが役に立った場合は、そのリンクとともにその旨を伝えます。

  • サインイン。 Claude Code では、サーバーは /keepplain:login のサインイン状態を使います。.mcp.json は接続のたびに scripts/keepplain.mjs mcp-headers にトークンを要求するため(headersHelper)、トークンが設定ファイルに保存されることも、チャットを経由することもありません。未サインインの場合、サーバーはブラウザーで /mcp からサインインするよう求めます。Codex はプラグインのヘッダーヘルパーをセッションのフォルダーから空の環境変数で実行するため、プラグイン自身のスクリプトを見つけられません。そのため Codex ではサーバーに個別にサインインします。codex mcp login keepplain を一度実行してください。Cursor も個別にサインインします。サーバーは ~/.cursor/mcp.json に設定された enable です。Settings → MCP → keepplain → Connect の順に選択します。Pi のツールは /keepplain:login のサインイン状態を使います。ライブラリの検索にアカウントは必要ありません。サインインすると、サーバーはチームのセッションも検索し、ゲストの利用制限が解除されます。詳しくは keepplain.com/for-agents をご覧ください。

  • 検索で送信される情報。 クエリ(タスクについての数語、または失敗の症状)、スタック、エージェント名です。コード、パス、リポジトリ名、会社名、クライアント名、ホスト名、URL、シークレットはクエリに含めないよう、エージェントに指示されています。サイトはクエリのテキスト、フィルター、検索結果の件数を 180 日間保存しますが、あなたやあなたの IP アドレスとは関連付けません。セッション自体が送信されることはありません。

  • 無効化。 Claude Code:/mcp を開き、keepplain を選択して無効にします。Codex:~/.codex/config.toml 内で

    [plugins."keepplain@keepplain".mcp_servers.keepplain]
    enabled = false
    

    Cursor:Settings → MCP で操作するか、~/.cursor/mcp.json から keepplain を削除します。Pi:pi remove でパッケージを削除するか、keepplain disable を実行します。

  • 別のサイトの場合。 プラグインのサーバーは常に https://keepplain.com/mcp を参照します。Claude デスクトップアプリは、表示するアドレスとセッションのアドレスを比較し、変数を展開しないため、${…} を含むアドレスではサインインできません。別のサイトを使うには、独自のサーバーを追加し、プラグインのサーバーをオフにします。Claude Code では claude mcp add --transport http keepplain-dev http://…/mcp、Codex では config.toml に [mcp_servers.keepplain-dev] と url = "http://…/mcp" を設定し、Cursor では mcp.json に別のエントリーを追加します。Pi のツールは KEEPPLAIN_URL で指定されたサイトに問い合わせます。セッションの送信先は引き続き KEEPPLAIN_URL とプラグインのオプション url に従います。

  • セッションで使用したビルド。 セッションを送信すると、プラグインはその中でエージェントがこれらのツールを呼び出した回数を数え、回答でリンクされたビルド(/b/<slug>?ref=agent、最大 20 件)と、エージェントがプレイブックを使って作業したビルドを収集します。後者は、エージェントが実行した kp-<slug> スキル(名前変更前は ct-<slug>。Skill ツール、または Claude Code で入力した /kp-…。Codex または Pi では <skill> ブロック、またはエージェントがスキルの SKILL.md を読み込むこと。Cursor では入力した /kp-…)のテキスト末尾にあるビルドのリンクから取得します。Cursor のトランスクリプトにはツールの結果が保存されないため、Cursor のセッションでは呼び出し回数だけがわかり、返されたビルドはわかりません。AGENTS.md や CLAUDE.md にルールとして記述されたプレイブックは、役に立ったかどうかにかかわらずすべてのセッションに含まれるため、カウントされません。プレビューにはこれらが表示されます。サイトは下書きをそれらのビルドに関連付けます。あなたの投稿には「ライブラリから使用」と「@author のプレイブックを使用して作成」が表示され、あなたが公開した後は、ビルドの投稿者側に「公開済みセッションで N 回役立った」と「N 件がこのプレイブックを使用して作成」が表示されます。送信されるのは回数とスラッグだけで、クエリは送信されません。セッション内では、各ライブラリ呼び出しはツール名で送られ、クエリと回答の代わりに [library call — not kept] が使われます。回数とスラッグは、その前にコンピューター上のセッションファイルから取得されます。

  • 共有の提案。 セッションごとに一度、回答後、エージェントがライブラリからビルドを取得し、セッション内でコードが変更された場合、Stop フックが次の1行を表示します。「このセッションで、エージェントは KeepPlain から 2 件のビルドを使用しました。あなたのビルドを共有:/keepplain:build」。何も送信されず、自動モードがオンの場合は表示されません。フックがセッションを読み取る際は、前回停止した位置から続け、その位置、回数、スラッグを ~/.keepplain/nudges/ に保存します。KEEPPLAIN_NUDGE=0 または node <plugin folder>/scripts/keepplain.mjs nudge off で無効にできます。Codex では、/hooks でプラグインのフックを信頼した後にのみフックが実行されます。

プレイブック

公開済みの Build には、プレイブックが付属していることがあります。これは、Build のページからエージェント向けに書かれた、そのセッションで得られた知見です(いつ使うか、進め方、落とし穴、確認事項、よりよい最初のプロンプト)。/keepplain:use <link or slug>(Codex では $keepplain:use、Cursor では /keepplain-use、ターミナルでは keepplain use)を実行すると、プレイブック全体が表示され、保存先と、すでにあるバージョンからの変更点が示されます。保存するのは、承認してからです。

--asClaude CodeCodex、Cursor、Pi
skill(デフォルト).claude/skills/kp-<slug>/SKILL.md.agents/skills/kp-<slug>/SKILL.md
ruleCLAUDE.md 内のブロックAGENTS.md 内のブロック
prompt表示のみ。書き込みなし表示のみ。書き込みなし
  • パスは、現在いるリポジトリのルート、またはリポジトリ外の場合はそのフォルダー内です。スキルは独立したフォルダーなので、そのフォルダーを削除すればなくなります。タスクが説明に一致すると、エージェントが自動的に開きます。フロントマターには名前と説明だけが含まれるため、ツールの権限はありません。
  • ルールは、と の間にあるブロックです。それ以外のファイル部分は、改行コードも含めてそのまま維持されます。CLAUDE.md が @AGENTS.md をインポートしている場合、ブロックは一度だけ AGENTS.md に書き込まれ、両方のエージェントが読み込みます。両方のファイルがあり、インポートがない場合は、選択したエージェントのファイルに書き込まれ、もう一方のエージェントには表示されないことが出力に示されます。
  • リポジトリ内の .keepplain/uses.json には、書き込まれた内容(Build、バージョン、形式、エージェント)が記録されます。自動で更新されることはありません。再度 use を実行すると、変更点が表示され、もう一度確認を求められます。
  • ターミナルでは、書き込み前に [y/N] で確認し、このコンピューターで両方のエージェントが使える場合は、どちらのエージェントを使うか尋ねます。スクリプトでは、--agent=claude|codex|cursor|pi と --write を指定すると、両方の質問に回答できます。
  • サイトから取得するのは公開ファイル /b/<slug>/use/<format>.md のみで、via=cli とエージェントの情報が付加されます。書き込みを伴うリクエストには write=1 が追加され、サイトでは利用としてカウントされます(1 日に 1 回)。リポジトリに関する情報は送信されず、トークンも送信されません。非公開のファイル(チームの Build のうち、公開されていないもの)の場合に限り、サインインを求めるリクエストが再度行われます。この情報を受け取るのはこのサイトだけです。チーム独自の Build はカウントされません。
  • チームのルールを使うには、チームのページに表示されているとおりに use --team=<team> --stack=<stack> を実行します。そのスタック用にチームがマージしたルールは、CLAUDE.md または AGENTS.md 内の 1 つのブロック(``)に、ルールと同じ方法で書き込まれます。ルールが変更されるのは、チームがサイト上で提案をマージしたときだけなので、すべてのメンバーに同じブロックが適用されます。メンバーのみが対象となるため、サインインが必要です。ここにあるブロックが古い場合、use --team はその後にマージされた提案を示します。
  • 最新状態の確認:チームのブロックがあるリポジトリでセッションを開始すると、SessionStart フックが、前回の確認結果に基づき、そのブロックの書き込み後にチームが提案をマージしている場合に、その旨を 1 行で通知します。フック自体がネットワークに接続することはありません。前回の確認から 6 時間以上経過している場合は、バックグラウンドで確認を開始します(If-None-Match とサインイン情報を使って GET /t/<team>/rules/<stack>.md を実行します。マージがない場合、サイトは 304 を返します)。結果は ~/.keepplain/team-rules.json に記録されます。ブロックが書き換えられることはありません。書き換えるのは、実行時の use --team です。
  • 書き込み後、Build のリンクに ?ref=use を付けて表示します。エージェントがプレイブックを使った後にリンクを開き、役に立ったかどうかをお知らせください。
別のエージェントで続ける

使用中のエージェントの利用上限が近づくと、プラグインがこのコンピューターにインストールされている別のエージェントで続けることを提案し、セッションの概要を渡すため、最初からやり直す必要はありません。情報がコンピューターの外に出ることはなく、サインインも不要です。

  • タイミング。 Claude Code では、プラグインのフックモジュールが Claude Code のステータス行に表示される数値(Pro または Max サブスクリプションの 5 時間および 7 日間の利用枠)を読み取ります。90% を超えると、プロンプトの上に一度だけ次のバナーが表示されます。「Claude の 5 時間の利用枠を 92% 使用しました。14:30 にリセットされます。続けるエージェント:[1 Codex] [2 Pi] [0 今はしない]」。空のプロンプトに数字を入力すると、そのボタンが押されます。利用枠に達した時点でターンが終了した場合も、同じ内容の行が表示されます。Codex では、Stop フックが Codex のセッションファイルに書き込まれる利用枠を読み取り、コマンドを 1 行で表示します。Pi と Cursor は利用枠をローカルで報告しないため、そこで自分で /keepplain:handoff と入力します。
  • 概要。 セッションファイルから、このコンピューター上でモデルを使わずに作成されます(利用枠に達した時点ではモデルを使えません)。内容は、タスク(最初のプロンプト)、途中で依頼した内容、変更したファイル、実行したコマンドと失敗したコマンド、最後の回答(停止した箇所)、リポジトリのブランチと未コミットの変更です。数画面分の Markdown が ~/.keepplain/handoff/<agent>-<session>.md に保存されます。
  • 引き継ぎ。 Claude Code のボタン、またはどこでも使える /keepplain:handoff codex を実行すると、概要がクリップボードにコピーされ、概要を最初のメッセージとして別のエージェントを起動するコマンドがプラグインにより表示されます。codex "$(cat ~/.keepplain/handoff/….md)"(Windows では codex (Get-Content -Raw '…'))。--open を付けると、新しいターミナルウィンドウでコマンドを実行しようとします。cursor-agent がない Cursor では、クリップボードにコピーされるだけなので、チャットに貼り付けてください。
  • フックモジュールの動作。 hooks/handoff.tsx は Claude Code の mod です。session.measure の利用状況の数値だけを読み取り、ボタンが押された場合はセッション ID も読み取ります。また、実行するプログラムは 1 つだけで、プラグイン独自のスクリプト node <plugin>/scripts/keepplain.mjs です(keepplain enable で単一ファイルの keepplain をインストールした後は、代わりにそのプログラムを実行します)。実行方法は次の 2 つだけです。利用枠の 50% を超えると handoff --targets --json を実行し、切り替えの確認、このコンピューターで見つかったエージェントと使用率を返します。ボタンが押されると handoff <agent> --session=<id> --no-copy --json を実行し、概要を作成します。このコマンドはセッションファイルを読み取り、ブランチと未コミットの変更を調べるためにリポジトリ内で git を実行し、概要を ~/.keepplain/handoff/ に書き込みます。その後、mod が Claude Code 経由で概要をクリップボードに入れます。mod もこのコマンドもネットワークリクエストを送信せず、トークンも読み取りません。情報がコンピューターの外に出ることはありません。
  • サインインしている場合、 次のエージェントに概要を渡す必要はありません。そこで /keepplain:resume を実行すると、このコンピューターまたは別のコンピューターにある KeepPlain からセッション全体を読み込み、1 つの Build の中で作業を続けられます。
  • 無効化。 keepplain handoff off(または KEEPPLAIN_HANDOFF=0)を実行すると提案が停止します。keepplain handoff 80 を実行すると、しきい値の割合を変更できます。コマンド自体は常に使用できます。
毎回のセッションに適用されるルール

以前にエージェントが間違えた箇所を記録して、同じことを二度修正せずに済むようにします。独自のルールはサイトの /rules にあります。1日に1回、モデルがセッションをまとめて読み、2つ以上の会話で繰り返され、単一タスク固有ではないミスだけを提案します。ワンクリックで、選択したスタックまたはすべてのセッションにルールを追加するか、独自のルールを作成できます。チームのルールは、メンバーが提案を通じて統合したものです。

まずタスクがあり、次にそのタスクのルールがあります。SessionStart フックは、すべてのセッションに適用されるルール(Everywhere)を、CLAUDE.md が読み込まれるのと同じように、セッションのコンテキストに追加します。スタックのルールは、関係するプロンプトとともに追加されます。プロンプトフック(Claude Code と Codex では UserPromptSubmit、Pi では拡張機能)が、このコンピューター上の各プロンプトをルールのキーワードや単語と照合し、該当するルールをセッションごとに1回追加します。プロンプトが外部に送られたり、保存されたりすることはありません。Cursor のプロンプトフックはコンテキストを追加できないため、Cursor ではすべてのルールを開始時に適用します。リポジトリに書き込まれることはありません。

同じフック(Claude Code、Codex、Pi、Antigravity。サインインが必要)は、プロンプトでコードの由来が尋ねられた場合(「откуда взялся X」、「who added this」、「why was this changed」、「в каком коммите」)、1行を追加します。git で変更内容を確認し、その変更を行ったセッションで理由を確認できます。そのため、エージェントは git log または git blame の後に、ファイルとコミット(Agent-Session トレーラーおよびメッセージの1行目である件名)を指定して search_my_work を呼び出します。ルールと同様、このコンピューター上で照合され、プロンプトが外部に送られることはありません。

  • 対象のスタック:リポジトリのルートと1階層下にあるマニフェスト(composer.json、package.json、pyproject.toml、requirements.txt、Gemfile、go.mod、Cargo.toml、Gradle と Maven、.NET プロジェクト、pubspec.yaml、Package.swift、Dockerfile または compose ファイル)を使います。これらがないリポジトリにはルールは適用されません。
  • 適用するルール:自分のルールはどこでも適用されます。チームのリポジトリ(GitHub のオーナーがチーム)の場合、オーナーまたは管理者がチーム設定で「Add the rules to every session」を有効にしていれば、チームのルールも適用され、自分のルールより先に追加されます。両方にあるルールは、チームの文面で1回だけ追加されます。リポジトリのファイルにすでに含まれているチームのブロック(use --team)は、再度追加されません。
  • 適用タイミング:フックがネットワークに接続することはありません。直近のフェッチで保持された内容を読み取り、それが1時間前のもの、またはリポジトリのスタックに変更があった場合は、バックグラウンドで新たにフェッチします。そのため、サイト上の変更は次のセッションから反映されます。リポジトリで最初に開始するセッションにはルールが適用されません。
  • 表示内容:ここにあるルールが変わったとき、開始時に1行表示されます(「KeepPlain added 3 rules to this session: Laravel (2 yours, 1 from Acme)」)。ルールの内容は /keepplain:rules で確認できます。Cursor では通知用のチャンネルがないため、この行は表示されません。Pi ではルールがシステムプロンプトに追加されます。
  • 無効化:このコンピューターでは keepplain rules off、シェルでは KEEPPLAIN_RULES=0 を設定します。
各行を書いた人

keepplain blame <file> は、各行の背後にあるエージェントのセッションを表示する git blame です。各セッションが書いたブロックごとに、欄外にエージェントとセッション名を表示し、変更を行ったターンへのリンクも表示します。

● Claude Code · Harden the webhook   4 │ const TOLERANCE_SEC = 300;
○ Pi · Seat count sync              19 │ await syncSeats(event.data, { lock: 'team' });
● Codex · maya, private             22 │ await markPaid(event.data.id, { notify: true });
  no session found                  25 │ return new Response('ok');
  • ● はセッションがそのコミットまたはその中の編集を行ったことを示します。○ は、手動で行われたコミットの前にそのエージェントがファイルを編集したか、コミットを確認しただけであることを示します。+1 は、そのコミットにほかのセッションも関わっていることを示します。
  • Git はお使いのコンピューター上で実行され、コードもそこに残ります。サイトに送られるのはファイルのパスとそのコミット(ハッシュ、各コミットでのファイル名、タイトル、Agent-Session トレーラー、日付)で、サイトは閲覧可能なセッションを返します。チームの一覧には表示されても閲覧できないチームメイトのセッションは、作成者名のみが表示されます。ファイルの最新の 300 件のコミットが検索され、1 回のリクエストにつき 100 件が対象になります。
  • サイトに存在しないセッションを示すトレーラーがある場合、このコンピューター上で検索されます。欄外にはその名前または最初のプロンプトが表示され、その内容が外部に送信されることはありません。サインインしていない場合はそれだけが表示され、それ以外のコミットについてはタイトルが表示されます。
  • -L <from>,<to> は指定した行を表示し、--rev=<commit> は指定したコミット時点のファイルを表示します。-w は空白文字を無視します。--color=always|never は色を制御します(デフォルトではターミナルでのみ色を表示し、NO_COLOR が設定されている場合は表示しません)。--json はスクリプトとデスクトップアプリ向けです。
GitHub で

公開済みの Build を使うと、プルリクエストのレビュー担当者に変更のビルド方法を伝えられます。/keepplain:share(Codex では $keepplain:share、Cursor では /keepplain-share、ターミナルでは keepplain share)。

  • share のみを実行すると、このセッションの Build(またはリンクやスラッグで指定した Build)が表示されます。数値、公開先、およびプルリクエスト用のブロックを確認できます。下書きのままの Build は共有されません。まず公開するためのリンクが表示されます。
  • share --pr は、このセッションのプルリクエスト(Build がリンクしているもの、なければセッションのブランチにあるオープン中のもの、さらにそれもなければここでチェックアウトしているブランチのオープン中のもの)の説明に「この変更のビルド方法」ブロックを追加します。--pr=<link> でプルリクエストを指定できます。このブロックは と の間に配置され、再度実行すると置き換えられます。説明のほかの部分はそのまま残ります。ご自身の GitHub CLI(gh、サインイン済み)を使用します。KeepPlain が GitHub に書き込むことはありません。Build にまだプルリクエストが紐付いていない場合は、このプルリクエストにリンクします。
  • share --readme は、リポジトリの README に「AI で構築」セクションを書き込みます。配置場所は `` マーカーの間です。公開リポジトリの場合、そのバッジにはリポジトリの公開セッション数が表示され、セッション一覧へのリンクが設定されるため、編集しなくても最新の状態が保たれます。コミットは行われません。
  • どちらも、まず変更内容を表示します。エージェントのスキルでは確認が求められ、ターミナルでは [y/N] と表示されます。スクリプトでは --write を渡します。
  • プルリクエストの自動モード:share auto on(またはサイトの Settings → GitHub)を設定すると、github.com 上のリポジトリで開始する各セッションが、バックグラウンドで最大 1 時間に 1 回、そのリポジトリから過去 2 週間以内に公開され、まだプルリクエストに含まれていない Build を確認し、各 Build を gh でオープン中のプルリクエストに追加します。次のセッション開始時に、実行した内容が 1 行で表示されます。デフォルトではオフです。share auto off で無効にできます。このコンピューターが有効化を認識するまでは(share auto on を実行するか、サイトが whoami またはプレビューにその情報を伝えるまで)、この機能のためにリポジトリのアドレスがサイトに送信されることはありません。
Git フック

keepplain enable(または --git-hooks)で有効にすることに同意したリポジトリ内でのみ設定され、グローバルには設定されません。フックは 2 つあり、それぞれ最初の行の直後にある # >>> keepplain と # <<< keepplain の間のブロックです。そのため、すでにフックがある場合は既存の行がそのまま残り、disable しても元の状態が保たれます。

  • prepare-commit-msg は、セッションの作業を含むコミットに Agent-Session: <session id> を追加します。エージェントが作成したコミットには、そのエージェント自身のセッションだけが記録されます。Claude Code、Codex、Pi は、実行するコマンドに自分が属するセッションを伝えます。自分のターミナル、IDE、Cursor からのコミットには、ステージ済みでまだコミットされていないファイルを回答によって変更した Claude Code、Cursor、Pi のセッション(Git のスナップショットから判別)、または、このリポジトリで自動モードが追跡していて、前回のコミット後に書き込みが行われた Codex セッションが記録されます。マージとスカッシュは対象外で、同じトレーラーが二重に追加されることはありません。--no-trailers を指定すると、このフックは追加されません。セッション ID はリポジトリの履歴の一部となり、公開リポジトリでは誰でも確認できます。
  • pre-push は、プッシュするコミットに関係するセッションを、トレーラーと、それらのコミットを確認した Claude Code、Cursor、Pi のスナップショットから特定します。自動モードが on、team、または push の場合、終了済みとしてバックグラウンドで送信します。自動モードが無効の場合は、プッシュ対象の背後にあるセッション数を示す 1 行を出力します。プッシュがネットワーク接続を待つことはなく、KeepPlain が原因で失敗することもありません。また、スナップショットの参照(refs/keepplain/…)がプッシュされることもありません。

自動モードが push の場合、セッションはそのコミットがプッシュされたときにのみ送信されます。コードを一度もプッシュしないセッションは、コンピューター上に残ります。このモードでは、エージェント自身のフックは何も送信しません。

フックが別の場所にあるリポジトリ(core.hooksPath:husky、lefthook、共有フォルダー)では、enable によってフックは追加されません。代わりに、自分でフックに追加する行が表示されます。

マシンから送信される情報

  • デフォルトでは、/keepplain:build を実行したセッションのみが対象で、確認後にのみ送信されます。
  • 自動モードをオンにすると、そのエージェントのこのコンピューター上の各セッションが、確認なしで対象になります。自動モードをオンにできるのはあなただけです(team の場合は、チームが求めているリポジトリでのセッションのみ、push の場合は、あなたがコミットをプッシュするセッションのみが対象です)。どちらの場合も、何も公開されません。
  • リポジトリでgit フックを使うと、セッション ID が Agent-Session トレーラーとしてコミットに含まれるため、そのコミットをプッシュするたびに、プッシュ先を問わず一緒に送信されます。セッション自体は送信されません。
  • スクリーンショット、思考ブロック、エージェントの管理用行を除き、ツールの出力を 60 行に制限したうえで gzip 圧縮した、セッションの .jsonl ファイルです。KeepPlain ライブラリの呼び出しは、クエリと回答を含めず、ツール名のみが記録されます。プラグイン自身の実行記録は末尾から除外されます。大きなファイルは行ごとに読み込まれます。スクリーンショットで埋め尽くされた 417 MB の Codex ロールアウトは、約 200 KB になります。Pi のセッションでは、system メッセージ(プロンプトとツールのスキーマ)、あなたが ! で実行したシェルコマンド、管理用の記録が除外されます。ツール出力を含まない Cursor のトランスクリプトでは、プロンプト、回答、ツール呼び出しが対象です。
  • セッションが git リポジトリで実行された場合は、GitHub 上にあるときの origin アドレス、ブランチ、セッション中に作成されたコミットのタイトル、ハッシュ、変更サイズ(ファイル数、追加/削除行数)も対象です(サイトでは各コミットが GitHub にリンクされます。コミット自体は送信されません)。プライベートリポジトリのアドレスは、ドラフトの閲覧者(あなた、またはチーム)にのみ表示され、Build の公開時に削除されます。Claude Code、Cursor、Pi では、開始フック(SessionStart、sessionStart、session_start)が各セッションの開始時点の HEAD を ~/.keepplain/sessions/ に記録します。このフックは何も送信せず、何も表示しません。
  • セッションに追加された各フォルダー(Claude Code の /add-dir、Codex のワークスペースルート)が独立したリポジトリの場合も同様に対象となり、そのフォルダーが開かれている間に作成されたすべてのコミットが、フォルダーのパスではなく名前とともに含まれます。このようなフォルダーは最大 5 つまでです。
  • エージェントがセッションのフォルダー外でシェルからコミットしたリポジトリ(cd ../api && git commit、git -C ../api commit)は、セッションのシェルコマンドから検出され、上記の 5 つのうち 1 つとして数えられます。ただし、対象はエージェント自身のコミットに限られます。git commit コマンドで指定したタイトル(-m、またはヒアドキュメントの 1 行目)か、git が応答で表示したハッシュが記録されます。その間に他の人が手動または別のセッションから同じリポジトリで作成したコミットは、ハッシュも含めて送信されません。また、変更サイズにも含まれません。エージェントのコミットを特定できる情報がないリポジトリ(git commit -q -F file、または git push や git merge のみ)は、まったく送信されません。プラグインはこの情報をこのコンピューター上のセッションファイルから読み取り、該当リポジトリの履歴を参照するだけで、リポジトリには書き込みません。
  • 変更されたファイルの差分です(1 ファイルあたり最大 300 行。環境設定ファイル、鍵・認証情報ファイル、ロックファイル、ビルドファイルは名前のみ)。プラグインはファイル名から環境設定ファイルと認証情報ファイルを判別します。.envと.env.(.example、.sample、.dist、.template を除く)、.env、.envrc、.dev.vars、.npmrc、.netrc、.pypirc、.pgpass、auth.json、credentials*、.git-credentials、id_rsa およびその他の SSH 鍵、.ssh/ 配下のすべて、.pem、.key、.p12、.pfx、.jks、.keystore、kubeconfig、.kube/config、.docker/config.json、secrets.yml/.yaml/.json/.toml、.tfvars、.tfstate、.tfstate.backup、.terraformrc、.htpasswd、application_default_credentials.json、local.settings.json、.vault-token、.s3cfg、.boto、.kdbx、.gpg、.ovpn です。これらのファイルについては、セッションに内容が保持されることもありません。ファイルの読み取り、検索、編集を行うツール呼び出し(Read、Grep、ファイル名を指定する BashまたはPowerShellコマンド。Codex ではファイル名を指定するパッチやコマンドも含む)は、出力が[content not shown, the file may hold secrets]に置き換えられ、Codex では入力も置き換えられます。別の名前のファイルは認識されないため、プレビューを確認してください。Claude Code、Cursor、Pi では、プラグインのフック(Claude Code ではscripts/snapshot.mjs)がセッション開始時、各プロンプトの送信後、各回答の後に実行され、作業ツリーの git スナップショットを作成します。一時的なインデックスは ~/.keepplain/snapshots/ に置かれ、追跡対象の変更と最大 1 MB の新規ファイルを記録し、refs/keepplain/ の reflog に連なるツリーと、あなたの HEAD を指す ref を作成します。そのため、git log --allにスナップショットは表示されません。ブランチ、インデックス、ファイルには手を加えず、通常のgit pushでこの ref が送信されることもありません。ビルド処理では、隣接するスナップショットから、エージェントが各ターンで変更した内容(Bash とサブエージェントを含む)、回答の合間にあなたが手動で変更した内容、および各ターンのコミットを特定します。スナップショットの作成に 3 秒を超えると、そのセッションでは作成が無効になります。14 日を超えたスナップショットと ref は、同じリポジトリで次にセッションを開始したとき、およびそこでkeepplain build、keepplain status`、または pre-push フックを実行したときに削除されます(プラグインがリポジトリに書き込む内容を参照)。git を使用しない場合、または Codex の場合、差分はセッション中にエージェント自身が行った編集から取得されます。
  • プライバシーチェックが認識するシークレットです。ルールに一致する鍵、トークン、接続文字列、URL 内のパスワード、メールアドレス、パブリック IP アドレス、内部ホスト名は、送信前にこのコンピューター上でセッション、ブランチ名、コミットタイトルのいずれからも [REDACTED:TYPE] に置き換えられます。パターンによるチェックでは、認識できないもの(平文のパスワード、一般的でない形式のトークン、あなたが登録していないクライアント名など)は見つかりません。そのまま送信されるため、公開前にプレビューとサイト上のドラフトを確認してください。パス内のホームフォルダー(C:\Users\you、/Users/you、/home/you)は ~ に置き換えられます。プレビューには、検出項目が番号と種類で表示され、値そのものは表示されません。--keep=<numbers> を指定すると、指定した項目はそのまま送信され、その SHA-256 のみがサイトに送信されるため、サイト側の 2 回目のチェックでも置き換えられません。保持した値は、ハッシュとして ~/.keepplain/kept.json に記録されます。すべてのセッションで非表示にする語句(クライアント名や内部サービス名など)は、~/.keepplain/privacy.json に {"redact": ["Globex", "billing-core"]} の形式で登録します。ルールはサイトと同じもので(KeepPlain から生成された scripts/lib/privacy.mjs)、test/fixtures/privacy の同じケースに対して確認されています。
  • モデルごとにセッションが使用したトークン数(入力、出力、キャッシュの読み込みと書き込み)です。セッションファイルを簡略化する前に集計します。トランスクリプトにトークン数がない Cursor では、各回答の後に stop フックへ Cursor が通知する情報から集計します。送信されるのはカウントのみで、Build とチームの集計に表示されます。
  • フォークしたセッション(Claude Code、Codex、Pi)では、フォーク元のセッション ID とフォークした時刻も含まれ、サイト上で 2 つの Build を相互にリンクできます。
  • セッションで KeepPlain ライブラリを使用した場合は、呼び出し回数と、取得した Build のスラッグ(最大 20 個)も含まれます。
  • share を使う場合、GitHub に送信されるのは、あなたの gh が書き込む Build のリンクを含むブロックのみです。サイトには送信先(プルリクエストまたはリポジトリのアドレス)が通知されます。共有の自動モードがオンの場合、セッション開始時に GitHub リポジトリの origin アドレスが、最大 1 時間に 1 回送信されます。
  • セッション以外では、エージェントが自動で行うライブラリ検索(短いタスク説明とスタック。エージェント内のライブラリを参照)と、公開プレイブックのみを取得する use が対象です(プレイブック)。
  • このトークンを使ってインポートを開始し、ライブラリを読み取ることができます。いつでも Settings で取り消せます。 各ネットワーク呼び出しと、送信される情報:
呼び出しタイミング送信される情報
POST /api/v1/device/codes, /device/tokenloginプログラム名(Claude Code、Codex、Cursor、Pi、KeepPlain CLI のいずれか)とバージョン、その後にデバイスコード。トークンやコンピューター名は送信されません。
GET /api/v1/mewhoami、auto、share auto、プレビュー(下書きの保存先を知らせるため)トークン。
POST /api/v1/imports, GET /api/v1/imports/{id}確認後の build/send、自動モード必要な情報だけに絞り、チェックしたセッション、agent、session_id、client_version、trigger、Git コンテキスト(GitHub の origin、ブランチ、コミットのタイトル、ハッシュ、サイズ、各コミットの作成日時とファイル名、リストにある単語を除外した名前)、トークン数、プライバシーの概要(種類ごとの件数、保持した値のハッシュ)、space、continues、fork、library(件数と最大 20 件のスラッグ)。トークン。
/mcpエージェントがライブラリを検索するとき(Pi では keepplain mcp-call を使用)クエリ、エージェントが記述するスタック、トークン。セッションは送信されません。
/mcp start_session_upload、返されたリンクへの PUT、/mcp finish_session_uploadクラウドセッション(ウェブ版 Claude Code)で、確認後に KeepPlain コネクター経由で build を実行するときPOST /api/v1/imports と同じセッションおよびフィールドを 1 つの JSON ファイルにまとめ、KeepPlain のストレージ(Cloudflare R2、*.r2.cloudflarestorage.com)にある一度限りのリンク(15 分間有効)へアップロードします。認証にはコネクター独自の claude.ai サインインを使用し、マシン上のトークンは使用しません。サイトは下書きの作成後、または 1 日後にファイルを削除します。
GET /b/<slug>/use/<format>.md、/t/<team>/rules/<stack>.mdusevia=cli、エージェント、書き込み時の write=1。チーム独自の Build またはルールの場合に限り、トークンも送信されます。
GET /t/<team>/rules/<stack>.md、/t/<team>/rules/<stack>.json?since=<version>SessionStart(バックグラウンドで、最大 6 時間ごと)、use --teamvia=hook、リポジトリ内のバージョンを指定した If-None-Match、トークン。チームのブロックがあるリポジトリに限ります。
GET /api/v1/rulesSessionStart(バックグラウンドで、リポジトリごとに最大 1 時間ごと)、rulesリポジトリのスタック(laravel,php)、GitHub のオーナー(acme。他のホストの場合はなし)、ファイルにすでに含まれているチームブロックの名前、最後のバージョンを指定した If-None-Match。トークン。リポジトリ名、パス、ファイルは送信されません。ルールをオフにしている場合は送信されません。
POST /api/v1/blameblameリポジトリのプロジェクトキー(origin アドレスまたはパスのハッシュ)、ファイルのパス、各コミットについて(最大 300 件、1 リクエストにつき 100 件)ハッシュ、そのコミット内でのファイル名、コミットメッセージの先頭行、Agent-Session トレーラー、そのコミットおよびその前のファイルのコミットの作成日時。トークン。コードは送信されません。サインアウト中は送信されません。
GET /api/v1/share、POST /api/v1/share/attachmentsshareBuild のスラッグまたはこのセッションの ID。変更後は、プルリクエストまたはリポジトリのアドレス。トークン。
PATCH /api/v1/share/settings、GET /api/v1/share/pendingshare auto on|off、共有自動モードがオンの状態での SessionStart(バックグラウンドで、リポジトリごとに最大 1 時間ごと)スイッチ、リポジトリの GitHub origin アドレス。トークン。
gh pr view、gh pr list、gh pr edit(お使いの GitHub CLI)確認後の share --pr、共有自動モードブロックを含む、プルリクエストの新しい説明。ご自身の GitHub サインイン情報はプラグインから見えません。
GitHub Releasesupdate、およびターミナルからバックグラウンドで 1 日に最大 1 回行われる確認リリースのリクエスト。ユーザーエージェントとして keepplain/<version> を使用します。お客様やセッションに関する情報は送信されません。
プラグインが読み取る認証情報

2 種類あり、それぞれ送信先は 1 か所だけです。

  • KeepPlain トークン。 KEEPPLAIN_TOKEN、Claude Code のプラグインオプション token(sensitive。システムのキーチェーンに保存され、貼り付けない限り空)、または /keepplain:login がそのサイト用に ~/.keepplain/credentials.json(自分だけが読み取り可能)に保存した値から、この順に取得されます。これは KeepPlain 独自のトークンで、上の表にある呼び出し(scripts/keepplain.mjs、scripts/lib/hooks.mjs)の Authorization: Bearer … として、発行対象の KeepPlain サイトにだけ送られます。プラグインの MCP サーバーも同じ方法で取得します。.mcp.json は接続のたびに node <plugin>/scripts/keepplain.mjs mcp-headers を実行し、サーバー自身のサイト(https://keepplain.com/mcp)用のヘッダーだけを出力します。サインインしていない場合は {} を出力し、サーバーからブラウザー経由でサインインするよう求められます。
  • プロキシの user:password。 HTTPS_PROXY(または HTTP_PROXY、ALL_PROXY、Windows の場合はインターネット設定の手動プロキシ)に設定されている場合、そのプロキシにだけ送信されます。トンネルの確立時に Proxy-Authorization として送られ(scripts/lib/http.mjs)、KeepPlain に送られることはありません。

これ以外に認証情報として読み取られるものはありません。GitHub のサインイン情報は、プラグインが share のために実行する gh 内に保持されます。.github/workflows の GH_TOKEN は GitHub Actions 上のリリースジョブ専用で、あなたのマシンに届くことはありません。デスクトップアプリ自体はトークンを読み取らず、同じ keepplain を実行します。テスト(test/)では、すべてのトークンに架空の値(ct_kkkk…)を使用し、ホームフォルダーには毎回一時的なものを使用します。

プラグインがお使いのコンピューターに保存するもの

~/.keepplain(または KEEPPLAIN_HOME)は、本人のみが読み取れます。フォルダーとその中のすべてのフォルダーは 0700、すべてのファイルは 0600 です(Windows では、代わりにユーザープロファイルが非公開に保たれます)。

ファイル内容保存期間
credentials.json, login-pending.jsonサイトごとのトークン、および Connect を待っているサインインlogout するまで、またはサインインが終了するまで
auto.json, auto-sessions.json, auto.log自動モードの選択内容、検出したセッション(パス、サイズ、時刻)、送信した内容変更するまで、各セッションは最後に検出されてから 14 日間、500 行までで 30 日を超えたものは削除
sent.json手動で送信したセッションと下書きのリンク90 日間
sessions/<id>.jsonClaude Code、Cursor、Pi のセッションが実行された場所と、開始時の HEAD30 日間
cursor/<id>.json, cursor/current/Cursor のフックが記録した内容:各ターンの時刻、モデル、トークン数、各ワークスペースが属する会話。テキストは含まれません30 日間
snapshots/<id>.json, .indexClaude Code、Cursor、Pi のセッションの Git スナップショット14 日間
nudges/Stop フックが読み取りを停止した位置、および検出した件数とスラッグ14 日間
kept.json, privacy.json送信を選択した値のハッシュ、および非表示にする単語編集するまで
share.json共有の自動モードがオンかどうか、各リポジトリを最後に確認した時刻、前回の起動以降に実行した内容確認記録は 30 日間、メモは次回の起動時に表示されるまで
rules.jsonリポジトリごと(パスで識別)のスタックと問い合わせたオーナー、サイトが回答したルールのテキストと時刻、およびこのコンピューターでルールがオフになっているかどうか各リポジトリは最後のセッションから 30 日間、スイッチは変更するまで
rules-given.jsonセッションごとに、プロンプトに含めたスタックルールの ID。各ルールを一度だけ含めるためのものです。プロンプトは含まれません7 日間
enable.json, plugin/, update.json, nudge.json, handoff.jsonenable の回答、配置するプラグイン、アップデートの確認、提案のスイッチ、ハンドオフのスイッチと割合disable するか、次に enable/update するまで
handoff/<agent>-<id>.md, handoffs/別のエージェント向けのセッション概要、およびセッションに通知された各制限ウィンドウ14 日間

プレビューは <temp folder>/keepplain/<session>.jsonl.gz と .json を書き込みます(非公開のフォルダーと非公開のファイル)。送信後、いいえを選択したとき(build、またはエージェントのビルドスキルの discard ステップ)、それ以外の場合はプレビューの 30 分後に、次回の keepplain の実行時または次のセッション開始時に削除されます。

プラグインがリポジトリに書き込む内容

  • Git フックと Agent-Session トレーラー:そのリポジトリで keepplain enable --git-hooks を実行した場合、または enable の質問に「はい」と答えた場合にのみ書き込まれます。.git/hooks/prepare-commit-msg と pre-push に、# >>> keepplain と # <<< keepplain の間のブロックが追加され、それ以降に作成するコミットにトレーラーが追加されます。disable を実行するとブロックは削除されますが、コミットにすでに含まれているトレーラーは履歴に残ります。
  • スナップショット参照(Claude Code、Cursor、Pi):リポジトリの .git 内にある refs/keepplain/<session> で、セッションごとに1つ作成され、現在の HEAD を指します。一時インデックスから作成されたスナップショットコミットは、そのリフログに格納されます(git reflog refs/keepplain/<session>)。git gc はそれらを保持しますが、git log --all では参照されません。通常の git push ではプッシュされません。参照は14日後に削除されます(上記を参照)。オブジェクトは、ユーザー自身が実行した git gc によって削除されるまで .git に残り、プラグインが git gc を実行することはありません。
  • share --readme --write:README.md の「Built with AI」セクションで、`` マーカーの間に書き込まれます。コミットはされません。
  • use --write:スキル(.claude/skills/kp-<slug>/SKILL.md または .agents/skills/kp-<slug>/SKILL.md)、あるいは CLAUDE.md/AGENTS.md のルールブロックと、.keepplain/uses.json に書き込まれます。Build、形式、エージェント、パスごとに1件のエントリーが作成され、Build のスラッグ、バージョン(hash)、形式(skill または rule)、エージェント(claude、codex、cursor または pi)、書き込み先のパス、時刻(at)、およびチームのルールの場合はチームとスタックが記録されます。それ以外の情報は記録されません。ユーザー名もトークンも含まれません。必要に応じてコミットするか、.gitignore に追加してください。
  • エージェント自身のフォルダー内:keepplain enable を実行した場合にのみ書き込まれ、disable で削除されます。Cursor の場合は ~/.cursor 内のフック、スキル、ライブラリーエントリー(hooks.json、skills/keepplain-*、mcp.json)です。Pi の場合は、pi install によって ~/.pi/agent 内の settings.json にパッケージ行が書き込まれます。

設定

設定場所デフォルト
サイトアドレスKEEPPLAIN_URL、または Claude Code ではプラグインのオプション url(プラグインを有効にするときに尋ねられます)。Codex では ~/.codex/config.toml に変数を設定します:[shell_environment_policy] set = { KEEPPLAIN_URL = "https://…" }。Cursor のフックと Pi の拡張機能は、エージェントの起動元の環境を引き継ぎますhttps://keepplain.com
トークン/keepplain:login でサイトごとに保存します。KEEPPLAIN_TOKEN、または Claude Code ではプラグインのオプション token(シークレットとして保持されます)を設定すると上書きされます(CI 用、または Settings で手動作成したトークン用)なし
データフォルダーKEEPPLAIN_HOME~/.keepplain
ライブラリを使用したセッションの共有を提案KEEPPLAIN_NUDGE=0 でシェル上で無効にできます。keepplain.mjs nudge off でこのコンピューター上で無効にできますオン
すべてのセッションでルールを適用KEEPPLAIN_RULES=0 でシェル上で無効にできます。keepplain rules off でこのコンピューター上で無効にできますオン
制限に近づいたとき、別のエージェントで続行することを提案KEEPPLAIN_HANDOFF=0 でシェル上で無効にできます。keepplain handoff off でこのコンピューター上で無効にできます。keepplain handoff <percent> または KEEPPLAIN_HANDOFF_AT でパーセントを変更できますオン、90% 時
プロキシHTTPS_PROXY(http:// のサイトでは HTTP_PROXY、両方に適用する場合は ALL_PROXY)、直接接続するホストには NO_PROXY を設定します。小文字の名前も使用できます。http:// または https:// のプロキシに、認証が必要な場合は user:password@ を付けます。SOCKS5 プロキシ(socks://、socks5://、socks5h://)にも対応しています。Codex で変数がプラグインに渡されない場合は、上記のように set に追加してくださいなし:直接接続

Windows では、プロキシ変数が設定されていない場合、CLI とエージェントフックは各リクエストの前に、インターネット設定で有効になっている手動プロキシを読み取ります。共有およびプロトコル別の HTTP/SOCKS5 プロキシ、ProxyOverride のワイルドカード、ポート、 に対応しています。ループバック接続は直接接続されます。ProxySettingsPerUser ポリシーが無効になっている場合は、コンピューター全体の設定が使用されます。明示的なプロキシ変数と NO_PROXY が優先されます。設定の読み取りにはレジストリクエリごとに 2 秒のタイムアウトがあり、設定が見つからない場合や読み取れない場合は直接接続します。設定されたプロキシが利用できない場合は、直接接続を再試行せずにエラーを報告します。CLI は PAC/WPAD スクリプトを評価しません。そのようなネットワークでは明示的なプロキシ変数を使用するか、デスクトップアプリの Chromium リゾルバーを使用してください。

Node 自身の fetch はプロキシ変数を無視するため、プラグインはプロキシの CONNECT トンネルを自ら開きます。ネットワークによっては、最初の 16 KB を超えるとサイトへの直接接続がリセットされ、whoami は通ってもアップロードはできないことがあります。その場合、プロキシを使用するとセッションを外部に送信できます。

スクリプトは Claude Code 自身の settings.json(pluginConfigs)から url オプションを読み取ります。スキル内の ${user_config.url} や CLAUDE_PLUGIN_OPTION_* 変数には依存しません。テストでは、デスクトップアプリがプレースホルダーを展開せず、変数もモデルが実行するコマンドに渡さないことが確認されています。

サポート、プライバシー、ライセンス

  • 質問や問題については、[email protected] までご連絡いただくか、このリポジトリにイシューを作成してください。プライバシーおよびセキュリティに関する報告は、[email protected] までお寄せください。
  • KeepPlain が保存するデータとその理由については、プライバシーポリシーをご覧ください。サイトの利用規則については、利用規約をご覧ください。
  • プラグインが何かを送信する場所はすべて、お使いのマシンから送信される情報に記載されています。通信先は KeepPlain、クラウドセッションのアップロード用の KeepPlain 独自のストレージ、共有時に使用するお客様自身の gh を介した GitHub、およびアップデート用の GitHub Releases のみです。
  • プラグインのコードは MIT ライセンスに基づいています(LICENSE を参照)。

開発

npm test                              # node --test, no dependencies
claude plugin validate . --strict
claude --plugin-dir .                 # try it in a real session
npm run build                         # dist/keepplain-<platform>-<arch>, needs Bun
npm run test:binary                   # the command and hook tests again, on that file

単一ファイルは、bun build --compile でコンパイルされた同じスクリプトです(scripts/build.mjs)。エントリーポイントは keepplain.mjs で、フックは keepplain hook <claude-code|codex|cursor|pi> <session-start|prompt|stop|session-end> として実行されます(scripts/lib/hooks.mjs。hooks/hooks.json 内のスクリプトも同じコードを呼び出します)。プラグイン enable が配置するものは、このリポジトリのスキルとマニフェストから作られ、ファイルに組み込まれます(scripts/lib/plugin.mjs)。これには、exec 形式の Claude Code のフック(シェルを介さず、command と args を使用)、Windows では PowerShell 用(& '…')、それ以外では sh 用の Codex のフックとスキル、Windows では cmd.exe 用の MCP headersHelper、プログラムを組み込んだ Pi の拡張機能、Windows では PowerShell 用、それ以外では sh 用の Cursor のスキルとフックが含まれます。Pi の拡張機能は pi/extensions/keepplain.js、Cursor のスキルは cursor/skills/*/SKILL.md です(enable が配置を完了するまでは、スクリプトのフォルダーを示す <plugin> が使われます)。npm test は test/isolate.mjs を先読みします。このファイルは Cursor と Pi のフォルダーを一時フォルダーに向けるため、テストが実際のフォルダーを読み書きすることはありません。node scripts/build.mjs all は、Linux x64 と arm64、macOS x64 と arm64、Windows x64 の全プラットフォーム向けにビルドします。このファイルは、実行されるフォルダーの .env や bunfig.toml を読み込みません。keepplain--vX.Y.Z タグを付けると、各プラットフォーム向けにファイルをビルド、テスト、署名し、SHA256SUMS とともにリリースとして公開します(.github/workflows/release.yml)。

scripts/lib/slim.mjs、scripts/lib/usage.mjs、test/fixtures/slim は、サイトのリポジトリ(resources/js/lib/slimSession.ts、resources/js/lib/sessionUsage.ts)から生成されます。そのため、プラグインはサイトのアップロードページとまったく同じ方法でセッションを短縮し、トークンを数えます。変更する場合はサイト側で変更してから、サイトのリポジトリで npm run plugin:sync を実行してください。

使用する API:POST /api/v1/device/codes と POST /api/v1/device/token(ブラウザーでのサインイン。トークンは不要)、POST /api/v1/imports(マルチパート:file、agent(claude-code、codex、cursor、pi のいずれか)、session_id、client_version、省略可能な git(commits.shas は commits.subjects の隣)、usage、privacy(ローカルチェックで種類ごとに編集された内容と、意図的に保持された値の SHA-256 ハッシュ。値そのものは含まれません)、continues、fork({"session_id", "at"}:このセッションのフォーク元セッションとその時点。at までの行は元セッションのものです)、library({"calls", "slugs"}:エージェントがライブラリを呼び出した回数と、取得した Builds のスラッグ最大 20 個。不明なスラッグは除外されます)、trigger(manual または auto)、space:personal またはチームのスラッグ。レスポンスには、space に下書きが保存された場所、forked_from に元セッションの Build({slug, title, url}。サイトにまだ存在しない場合は null)、および公開済みセッションを自動送信した場合の {"status": "skipped"} が含まれます)、GET /api/v1/imports/{id}、GET /api/v1/me(アカウントと、その GitHub オーナー、および自動送信を求めているかどうかを含むチーム一覧)。いずれも Authorization: Bearer <token> を指定します。MCP サーバーは /mcp(Streamable HTTP、同じトークンを使用)です。mcp-headers は Claude Code 用にトークンを出力します。エラーは {"error": {"code", "message"}} の形式で返されます。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。