killbottleneck について
killbottleneck は、人と AI エージェントが協力するチーム向けのセルフホスト可能なプロジェクト・プロセスマップアプリです。目標マップ、タスク、共同作業、任意の AI 機能を備え、MCP サーバーと REST API も組み込まれています。
主な機能
- 01目標とプロセスのビジュアルマップ
- 02タスク、コメント、マップ共有
- 03時間記録と日次タスク概要
- 04任意で使える AI アシスタントとマップ要約
- 05JSON のインポートとエクスポート
活用シーン
- 01チームの目標やプロジェクトプロセスを整理
- 02日々の作業確認と時間記録
- 03AI によるプロジェクトマップの作成や更新
- 04MCP 経由で AI クライアントにマップの読み書きを許可
MCP 対応
マップや目標の操作、人物・ポートフォリオ情報、カレンダーイベント、リマインダー、ルール向けのツールを提供する MCP サーバーを内蔵しています。クライアントは Streamable HTTP でインスタンスの `/mcp` エンドポイントに接続するか、npm パッケージをローカルで実行できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y killbottleneck-mcpKB_URLAddress of your killBottleneck instance, e.g. https://company.killbottleneck.com or http://192.168.1.10:8090KB_API_KEYシークレットAPI key issued in the app (user menu -> API keys). Use a read-write scope for editing.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
20掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| archived | boolean | いいえ |
詳細
killBottleneck
English | Čeština
ウェブサイト ·
ドキュメント ·
変更履歴 ·
ライセンス
🧪 パブリックベータ。 killBottleneck は機能がそろったベータ版です。クラウド版もセルフホスト版も同じアプリです。現在テストしているのは、セルフホスト版のインストール、リバースプロキシ、独自の SMTP、アップグレードです。インストールして(以下のクイックスタートをご覧ください)、問題を起こしてみて、その結果をお知らせください。バグは Issues、アイデアは Discussions へ。ベータが落ち着いたら v1.0 をリリースします。
プロジェクト、会社、プロセスを視覚的に表現するゴールマップです。人々と AI エージェントが一緒に取り組めます。**すべて自社サーバー上で完結し、データが会社の外に出ることはありません。****無料でセルフホストでき、REST API と MCP サーバーが付属しています。**オープンソースの精神に基づいて公開していますが、ホステッドサービスとして再販売する権利はありません。詳しくはライセンスをご覧ください。

**ここから外部に情報が送信されることはありません。**デフォルトのインストールでは、サーバーはどこにもリクエストを送信せず、アプリはフォントも含め、サードパーティの CDN から何も読み込みません。すべて自分のインスタンスから配信されます。ネットワークの外に送信される可能性があるのは、あなたが有効にしたものだけです。
| 外部へのリクエスト | 発生するタイミング | 無効にする方法 |
|---|---|---|
| GitHub Releases API | バージョン確認時。サーバーではなく、ユーザーのブラウザーから送信 | KB_UPDATE_CHECK=0 |
| 設定した AI エンドポイント | KB_AI_PROVIDER ≠ none の場合のみ。独自の Ollama や、任意のエンドポイントを使用できます | KB_AI_PROVIDER=none(デフォルト) |
| Google(サインイン、Drive ピッカー) | KB_GOOGLE_* を設定した場合のみ | 空欄のままにする(デフォルト) |
テレメトリー、アナリティクス、ライセンス確認はありません。
目次 — この README が詳細なリファレンスです。簡易版はウェブサイトをご覧ください。
- クイックスタート
- AI なしでできること · スマートフォンでの利用
- AI 機能(オプション)
- MCP 経由の AI アシスタント
- ステップを実行するのは誰か:人か、自動化か — 独自のエージェント向けのウェブフック仕様を含みます
- プロジェクトを別の場所に移動する(JSON のエクスポート/インポート)
- 外観(スキン) · 通知 · タイムゾーンと定期テンプレート
- データとバックアップ · チーム · 登録と登録キー
- Google でサインイン · 添付ファイル · メール(SMTP)
- HTTPS(外部からのアクセス) · アップデート
- ライセンス — フェアコード · お問い合わせ
クイックスタート
必要なのは Docker だけです。以下を実行してください。
cp .env.example .env # optional — the defaults are fine
docker compose up -d
killBottleneck は http://SERVER-IP:8090 で起動します。同じローカルネットワーク上の同僚は、ブラウザーで開くだけで利用できます。
**最初に登録したユーザーが自動的に管理者になります。**それ以外のユーザーは自分で登録するか、管理者から管理画面で招待を受けられます(この方法では、一時パスワードを設定したアカウントが作成され、引き渡されます)。
AI を使わない場合にできること
目標マップの全機能を備えたエディター(ノード、エッジ、ステータス、メモ)、ユーザーごとに複数のマップを作成、目標へのコメント、同僚とのマップ共有(閲覧/編集)、公開マップ、画像/PDF へのエクスポート。

「今日の予定」パネル(ホームページとタスクページの両方):期限超過/今日/1 週間以内/他の人をブロックしているタスクを、データからリアルタイムで算出して一覧表示します。日付の横に名前の日を表示し、モバイル向けに縦長の PNG としてエクスポートできます。タスク名を含む通常版と、名前を伏せた匿名版(ソーシャルメディア向け)の両方に対応しています。HTTPS 経由では**共有…**も利用できます(スマートフォン標準の Web Share ダイアログを使い、サードパーティのサービスは使用しません)。
時間記録:トップバーの⏱タイマー(1 回のクリックで「空の」計測を開始し、計測中または計測後にプロジェクト/クライアント/目標を割り当てます)、各タスクとマップ内の各目標にあるタイマー(計測によってステータスが変わることはありません。あくまで補助機能です)、記録を表示する左側の「時間記録」パネル(開始・終了時刻、後からの割り当て)、ユーザーメニューの「作業時間」ダイアログ(今日/今週の時間をプロジェクト別・クライアント別に表示)、クライアント一覧(プロジェクトからクライアントを割り当て、クライアントごとの時間も集計)、およびタイマーを停止し忘れた場合に 12 時間後に自動停止する機能。**インボックスの動作:**未割り当ての計測をメモ付きで停止すると(例:「クライアントとの電話」)、その内容がアイデアとしてストックにも保存されます。
スマートフォンでの利用
同じインスタンスをスマートフォンで開くと、簡易ビューに切り替わります。今日のタスクの確認と完了、タスクの追加、メッセージの閲覧ができます。小さな画面でマップキャンバスを操作する必要はありません。いつでも全機能ビューに戻せます。また、アプリをホーム画面に追加すると(HTTPS 経由)、ネイティブアプリのように動作します。
詳しくは簡易ビューガイドをご覧ください。
## AI 機能(任意)
アシスタントはマップの横にあるサイドパネルに表示されます。1日の予定を一緒に立てたり(朝のブリーフィング、夜の計画)、写真、PDF、音声メモからメモを整理したり、いくつか質問に答えるだけでプロジェクト全体の下書きを作成したり、会議の準備をしたり、1週間を振り返ったり、マネージャー向けにチーム会議を進行したりできます。マップを自ら読み取り、提案する変更はすべて確認用のカードとして表示されます。知らないうちに変更が書き込まれることはありません。作成されたメール、メモ、要約は、チャットの横にドキュメントとして保存されます。アシスタントのほかにも、ノード上の魔法の杖(サブステップ、マイルストーン、KPI、リスク)、AI プロジェクト要約、My day の毎日の励ましがあります。
AI は .env で KB_AI_PROVIDER を設定すると有効になります。
openai— OpenAI 互換 API ならどれでも利用できます:OpenAI、OpenRouter、Groq、Mistral、Together、または独自の vLLM / LM Studio / llama.cpp / liteLLM プロキシ。KB_AI_URL=https://openrouter.ai/api/v1(ベースアドレス。通常は末尾が/v1)、KB_AI_TOKEN=<your API key>、KB_AI_MODEL=<exact model name>を設定します。音声メモの文字起こしには、Whisper / transcribe モデルを提供している同じサービスが使われます。リクエスト料金はプロバイダーから請求されます。api— killBottleneck API コントラクトに対応したリモート AI サービスです。プロバイダーから入手したアドレスとトークンを入力します。自前の GPU も保守も必要ありません。(魔法の杖、要約、励ましを実行します。アシスタントにはollamaまたはopenaiが必要です。)ollama— 自分のローカルモデル: Ollama をインストールし、モデルを取得して(ollama pull gpt-oss:20b)、KB_AI_URL=http://IP:11434とKB_AI_MODEL=gpt-oss:20bを設定します。すべて自分の環境で実行され、データがネットワークの外に出ることはありません。(音声メモには独自の音声テキスト変換サービスが必要です。下記をご覧ください。)custom— 同じ API コントラクトに準拠した独自のエンドポイントを使用します(コントラクトはこちらに記載されています)。
アシスタントは、専用の設定(KB_CHAT_PROVIDER/URL/MODEL/TOKEN)を指定しない限り、同じモデルを使用します。写真を読み取るにはビジョンモデルが必要です(KB_VISION_* を設定するか、Administration → AI で The assistant reads images にチェックを入れます)。音声メモには、OpenAI 形式の音声テキスト変換サービス(KB_TRANSCRIBE_PROVIDER=openai + KB_TRANSCRIBE_URL — speaches、whisper.cpp、OpenAI など)が使えます。録音そのものが保存されることはありません。ブラウザーでマイクを使えるのは HTTPS(または localhost)経由のみです。また、前段にリバースプロキシがある場合は、約 5 MB のリクエスト本文(音声メモまたは写真がリクエストに含まれます)を通過できる必要があります。詳しくはアシスタントガイドをご覧ください。
AI を使用すると、マップのデータは選択したエンドポイントに送信されます。none(デフォルト)の場合、データがサーバーの外に出ることはありません。
毎日の AI による励まし(My day パネルに表示される一言):ほかの人の作業を妨げていること → 期限超過 → 今日の予定、の優先順位で 1~2 文を生成し、ときどきことわざも加えます。朝、cron ジョブ(KB_SUMMARY_HOUR、デフォルトは 6)によって、直近 KB_SUMMARY_ACTIVE_DAYS 日以内(デフォルトは 14、0 = 全員)にサインインしたアカウントだけを対象に生成されます。それ以外のユーザーについては、アプリを開いたときに生成されます。要約専用に、別の(小型で高速な)モデルを任意で設定できます:KB_SUMMARY_PROVIDER/URL/MODEL/TOKEN — 設定しない場合は、上記の一般的な AI 設定が使われます。この一言が表示されない点を除けば、AI がなくてもパネルの機能はすべて利用できます。AI がタスクリストを列挙することはありません(これらはデータから計算され、クリックできます)。また、タスク名はプロンプトに含める前にサニタイズされます。
MCP を介した AI アシスタント(Claude Desktop、Claude Code、…)
killBottleneck には組み込みの MCP サーバー(mcp/)が付属しています。AI アシスタントを自分のインスタンスに接続すると、「この会議メモからマップを作って」のように会話しながらマップを作成したり、一括編集したり、完了した項目にチェックを付けたりできます。セルフホストのインスタンスでもホスト型のインスタンスでも同じように動作し、異なるのはアドレスだけです。
-
アプリで、ユーザーメニュー → API keys → Read and write スコープの新しいキーを作成します(読み取りアクセスのみの場合は Read only で十分です)。トークンは一度しか表示されません。キーには有効期限を設定し、使わなくなったら失効させることをおすすめします。
-
インストールは不要です。サーバーは npm の
killbottleneck-mcpとして公開されているため、初回使用時にnpxが取得します。(このリポジトリから実行する場合は、cd mcp && npm installを実行し、以下のnpxコマンドの代わりにnode /absolute/path/mcp/index.jsを使用します。) -
アシスタントに登録します。
Claude Code:
claude mcp add killbottleneck \ -e KB_URL=http://SERVER-IP:8090 \ -e KB_API_KEY=kb_user_... \ -- npx -y killbottleneck-mcpClaude Desktop(
claude_desktop_config.json→mcpServers):{ "mcpServers": { "killbottleneck": { "command": "npx", "args": ["-y", "killbottleneck-mcp"], "env": { "KB_URL": "http://SERVER-IP:8090", "KB_API_KEY": "kb_user_..." } } } }
ツール(20 個):list_maps、get_map、create_map、add_nodes、update_node、delete_node、
list_people、get_portfolio、get_org_structure、カレンダーイベントと時間指定リマインダー(create_event、
list_events、create_reminder)、およびルール関連ツール(create_rule、list_rules、
update_rule、delete_rule、list_rule_runs、list_rule_templates、save_rule_template、
delete_rule_template)。担当者または期限が設定された目標はタスクとして扱われます。独立したタスクレコードはありません。API を通じて owner を割り当てると、その人がコラボレーターとしてマップを共有されるため、作業がその人の「My Day」に表示されます(レスポンスには共有相手が記載されます)。
**ローカル環境なしでリモート接続:**すべてのインスタンスは MCP を /mcp(Streamable HTTP、同じキー、同じツール)で直接提供しています。claude mcp add --transport http killbottleneck https://your-instance/mcp --header "Authorization: Bearer kb_user_..." を実行します。claude.ai コネクターは OAuth を通じてサインインします。詳細:MCP サーバー。
**セキュリティ:**キーは所有者と同じ権限で動作し、共有マップやチームマップを含め、所有者がアプリで参照・編集できるものとまったく同じものにアクセスできます(edit/自分のノード = 書き込み可能、work と read = 所有者自身のノードのステータスのみ。アプリで完了にチェックを付ける場合と同じです)。アカウントのロールは参照しないため、管理者のキーでも他のユーザーの非公開マップは見られず、他のユーザーの公開マップにもアクセスできません(404)。管理機能、AI 設定、ユーザーには一切アクセスできません。目標やタスクの追加・編集・削除はできますが、API を通じてマップ全体を削除することはできず、マップの最上位ノードも削除できません。利用制限:キーごとに 1 分あたり読み取り 120 回、書き込み 30 回、1 回の呼び出しにつき最大 200 ノード、アカウントあたり最大 20 キーです。エディターを開いたまま並行して作業した場合は、競合検出で処理します(エディターは再読み込みを提案し、アシスタントはマップを自動で再読み込みします)。注:add_nodes はマップ全体のレイアウトを再実行します。MCP ツールの出力は英語です(アシスタントは常に理解できます)。サーバーのエラーメッセージはアカウントの言語で表示されます。
ステップを実行するのは人か、自動化か
マップ内の各目標について、実行するのが 人 か 自動化 かを指定できます。その自動化の背後に AI エージェントがいるのか、定期実行の cron ジョブがあるのかは、あなたが気にする必要はありません。構築した人が把握しています。
重要:目標の責任者は常に人間です。 自動化されたステップでも、責任を負う人がいて、その人が通知を受け取り、その人の「My day」に目標が加算されます。作業を行うのは自動化ですが、その責任を負うのは人です。
自動化されたステップでは、どの自動化が実行するか も記録します。これは現在の状況を記録するもので(「このステップはすでに n8n が実行してくれている」)、指示ではありません。これにより、マップ内のどの部分を人が担当し、どの部分を機械が担当しているかを一目で把握できます。
「これを自動化してほしい」
どの目標でも、このステップの自動化を依頼するにチェックを付け、必要に応じて理由を説明する文を追加できます。依頼はAI エージェント管理者に届きます。これはユーザーの役割とは別のユーザーフラグ(ユーザー管理 → AI manager)です。管理者も一般メンバーも、自分の役割に加えてこのフラグを持つことができます。
管理者が自動化を作成して目標に登録すると、依頼は自動的に片付き、依頼者には目標が自動化されたことを知らせるメッセージが届きます。一連の流れは次のとおりです。
person: ☑ I would like this automated ("I upload subtitles by hand, 20 minutes")
↓
the AI manager gets a notification → decides → builds an n8n workflow
↓
the manager records it on the goal: "n8n — subtitle translation"
↓
the requester gets a notification: "your goal is now automated by n8n — subtitle translation"
目標への添付ファイル
どの目標にもファイルをアップロードできます。自動化が設定された目標では、ファイルをアップロードするとすぐに自動化が開始されます。別の場所でフォームに入力する代わりに、処理が必要なファイル(通常は字幕、ソース素材、エクスポートデータ)を添付するだけです。
添付ファイルを閲覧できるのは、プロジェクトへのアクセス権を持つ人だけです。ファイルは保護されているため、リンクだけでは中身を見られません。
AI エージェントレジストリ
AI エージェント管理者(または管理者)は、AI エージェントレジストリで自動化の一覧を管理します。登録項目は、名前、Webhook アドレス、署名シークレット、有効/無効です。目標では自動化を名前で選択します。チームメンバーにアドレスやシークレットが表示されることはありません。目標に設定された名前がレジストリ内のエージェントと一致すると、killBottleneck が自動的にそのエージェントを開始できます。
開始できるユーザー。 各エージェントには、許可するメールアドレスのリストを設定できます。リストが空の場合、どのマップでも編集できる人なら誰でも自動化を開始できます。社内であれば通常は問題ありませんが、請負業者も参加するインスタンスでは制限してください。マップを編集できる人なら誰でも、n8n のワークフローを開始し、独自のテキストを入力できてしまいます(目標のタイトルと説明はペイロードでエージェントに送信されます)。
添付ファイルは、プロジェクトごとに最大 200 ファイルまでアップロードできます。また、必要に応じてインスタンス全体の容量制限を設定できます(MB 単位の KB_FILES_MB。0 = アップロードを完全に無効化、空欄 = 制限なし。ホスト型インスタンスで共有ディスクを使う場合は、容量を使い切られないよう制限を設定してください)。⚠️ 以前の FLOWMAP_MAP_FILES_MB は、デフォルトが 200 MB のプロジェクトごとの容量上限でした。設定済みの場合は引き続き適用されますが、設定していない場合、現在は容量制限が一切ありません。
自動実行:killBottleneck → n8n → 結果の報告
自動化は、次のいずれかをきっかけに開始されます。
- 目標に添付ファイルがアップロードされたとき、または
- 目標の順番が来たとき — サブ目標の完了を待っていて、それらがすべて完了したとき、または
- 誰かが目標を手動で「進行中」に切り替えたとき(これにより、失敗した実行を再試行できます)
実行中の自動化は、結果が報告されるか期限切れになるまで、二度目は開始されません。
送信リクエスト(エージェントのアドレスへの POST。X-Signature ヘッダーには、エージェントのシークレットを使ってリクエスト本文全体を HMAC-SHA256 で署名した値が入ります):
{
"run_id": "…", "run_token": "kbr_…",
"callback_url": "https://your-instance/api/kb/agent-callback",
"files_url": "https://your-instance/api/kb/agent-files?run_token=kbr_…",
"files": [{ "id": "…", "name": "subtitles.sbv", "size": 1234, "url": "https://…?run_token=kbr_…" }],
"map_id": "…", "map_title": "…",
"node_id": "…", "node_title": "…",
"description": "…", "deadline": "2026-08-01",
"owner": "[email protected]", "triggered_by": "[email protected]"
}
エージェントは実行トークンを使ってファイルをダウンロードします。files_url は最新の一覧なので、実行中に追加された添付ファイルも確認できます。結果が報告されると、トークンは期限切れになります。
結果の報告(callback_url への POST。ログインは不要で、実行トークンが認証に使われます):
{ "run_id": "…", "run_token": "kbr_…", "status": "done", "result": "Translated into 3 languages" }
status は done または failed です。トークンは1つの目標に対する1回の報告に限り有効です。同じトークンで2回目の呼び出しを行っても、受け付けられません。
done の後、目標は完了となり、プロセスの残りが動き出します。次の目標のブロックが解除され、担当者に開始できることが通知されます。次の目標も自動化されている場合は、すぐに開始されるため、手順が自動的に連鎖します。
エージェントが結果を報告するアドレスを設定します。 callback_url はブラウザーではなくサーバーによって組み立てられます。設定がない場合は PocketBase の「Application URL」が使われ、インストール直後は http://localhost:8090 です。そのため、別のマシンで実行中のエージェントは自分自身に接続しようとし、タイムアウトするまで実行が停止したままになります。.env で次のように設定します。
KB_PUBLIC_URL=https://killbottleneck.yourcompany.com
KB_AGENT_TIMEOUT_MIN=90
エージェントが到達できるアドレスであれば何でもかまいません。セルフホスト環境では、LAN 上の http://192.168.1.10:8090 で問題ありません。ホスト型インスタンス(killBottleneck Cloud)では、自動的に設定されます。
n8n は同じネットワーク上にありますか? Webhook アドレスはサーバーから呼び出されるため、内部ネットワークをスキャンする典型的な経路になります。そのため、デフォルトでは killBottleneck はプライベートアドレス(10.x、192.168.x、172.16–31.x、localhost、クラウドのメタデータ)への呼び出しを拒否します。killBottleneck の隣で n8n が動作しているセルフホスト環境では、次のように許可してください。
KB_ALLOW_PRIVATE_WEBHOOKS=1
これを設定しないと、実行は失敗として記録され、AI エージェントの管理者に理由を説明するメッセージが届きます。エージェントにはシークレットを必ず設定してください。設定がないと、空のキーでリクエストに署名することになり、受信側をまったく保護できないため、killBottleneck はそのような実行を拒否します。現在有効なアドレスは常にAI エージェントのレジストリの下部に表示され、localhost を指している場合は警告されます。これは自動化にのみ関係します。自動化を使わない場合、この変数を設定する必要はありません。
自動化が完了しない場合
実行状態は目標のダイアログ内ですぐに確認できます — pending / running / done / failed が表示され、失敗時には理由も表示されます。目標を再び「進行中」に切り替えると、実行が再開されます。
各状態の意味は次のとおりです。
| 状態 | 処理内容 |
|---|---|
| pending | 実行はキューに入り、1分以内に送信されます(1回のマップ保存で送信される Webhook はせいぜい数件なので、誰かが待たされることはありません) |
| running | エージェントが作業を受け取り、まだ結果を報告していません |
| done / failed | エージェントから結果が報告されたか、実行が期限切れになりました |
KB_AGENT_TIMEOUT_MIN(デフォルトは90)分以内に結果が報告されない実行は、ウォッチドッグによって失敗として記録され、担当者と AI エージェントの管理者の両方に通知されます。そのため、目標が気付かれないまま停止することはありません。
よくある失敗の原因は、エージェントがレジストリに登録されていない、または無効になっていること、シークレットが設定されていないこと、アドレスがプライベートネットワークを指しているのに KB_ALLOW_PRIVATE_WEBHOOKS=1 が設定されていないこと、または Webhook に到達できないことです。詳細(接続エラーを含む)はサーバーログ(docker compose logs killbottleneck)に記録されます。意図的にアプリには表示されません。
プロジェクトを別の場所に移す(JSON のエクスポートとインポート)
プロジェクトは .json ファイルにエクスポートして、同僚との間やインスタンス間で別の場所にインポートできます。エディターで Export → Export JSON を選び、with names または without names を選択します。インポートは「New project」ボタンの横にあるメニューから行えます。
ファイルに含まれる内容:タイトル、説明、目標の構造全体(ステータス、期限、各ステップの担当者、自動化リクエストを含みます)、および関連付けられたタスクです。「without names」オプションを選ぶと、担当者と割り当て先の両方がクリアされます。自動化の名前はプロセスを表すものなので、そのまま残ります。
**Asana または Trello からの移行:**同じインポート機能で、**Asana プロジェクトのエクスポート(CSV)とTrello ボードのエクスポート(JSON)**も読み込めます。セクション/リストはマップのブランチに、タスク/カードは目標に、サブタスクとチェックリストは子目標になります。ステータス(完了)、期限、説明が引き継がれ、Asana の場合は割り当て先も引き継がれます(このインスタンスに存在しないメールアドレスはクリアされ、件数が表示されます)。すべてブラウザー内でローカルに変換されます。Asana や Trello への通信はありません。上限はファイルあたり 400 項目です。
引き継がれないもの:添付ファイル、コメント、共有、アーカイブ、番号の連番です。インポートすると、必ずインポートした人が所有する新しいプロジェクトが作成され、目標 ID が再生成されます(元のプロジェクトと重複しないようにするためです)。また、誰とも共有されず、通知も送信されません。共同作業するには、手動でプロジェクトを共有する必要があります。このインスタンスに存在しないメールアドレスへの割り当ては削除され、インポート時に件数が表示されます。
外観(スキン)

アバターメニュー → Appearance から、12 種類の組み込みスキンの中から選べます。Indigo(デフォルト)、High contrast、Terminal、Paper、Ocean、Forest、Midnight、Plum、Peach、Graphite、Ruby、Rose です。選択はアカウントに保存されるため、ライトモードとダークモードの両方で、すべてのデバイスに適用されます。簡易ライトビューにも適用されます(その画面では、選択メニューはリストの下にあります)。
カスタムスキン:スキンは小さな JSON ファイル(kb-skin v1 形式)で、色(HSL)、フォント、角丸の設定を含みます。外観ダイアログでは、現在のスキンをエクスポート(組み込みスキンの場合は、その定義をエクスポートして「取り出して調整」できます)したり、ファイルまたは貼り付けで他の人のスキンをインポートしたりできます。設計上、任意の CSS を使うことはできません。値はクライアントとサーバーの両方で許可リストを通過するため、共有されたスキンが何かを実行したり送信したりすることはありません。Web フォントがダウンロードされることもありません。アプリに同梱されたフォントとシステムフォントのみが使用されます。不明なフォントが指定されていても安全に次のフォントにフォールバックします。
**会社の外観:**管理者は組織管理画面で、インスタンス全体のデフォルトスキンを設定できます。自分のスキンを選んでいないすべてのユーザーに適用され、ログイン画面にも反映されます。ユーザーが自分で選んだスキンは、常に優先されます。
v1 でスキンによって変わらないもの(意図的な仕様):ステータスの色(赤/黄/緑=期限超過/進行中/完了)は、どこでも同じように読み取れます。マップのエクスポート(PNG/PDF)は画面表示に忠実です。背景色を含め、アクティブなスキンとライト/ダークモードの状態でキャプチャされます。背景のアートワークのみ含まれません。プロジェクトダッシュボードの PDF と「My day」の画像は、誰にでも送れるよう、意図的にライト表示のままです。
コミュニティスキンとオープンソースのスキンエディター: https://github.com/tengolabs/killbottleneck-skins — スキンは無料のデータ(CC0)、エディターは MIT ライセンスです。インストール不要で、ブラウザーからすぐにエディターをお試しいただけます: https://tengolabs.github.io/killbottleneck-skins/.
通知
ヘッダーのベルには直近20件のイベントが表示されます。フィルターとページ送りがある全件リストは
/notifications にあります。通知設定もここから行えるため、各自で通知の種類ごとにオン/オフを切り替えられます。
通知は次の場合に送信されます。タスクまたは目標があなたに割り当てられたとき(すでに存在するマップ内での割り当ても含みます)、タスクまたは目標にコメントが付いたとき、プロジェクトがあなたと共有されたとき、待機中の目標がブロック解除されたとき、期限が近づいたとき、または過ぎたとき(項目ごとではなく、1日に1回のダイジェスト)、自動化のリクエストとその完了、自動化の終了または失敗、タイマーが自動停止したときです。
期限リマインダーは朝に送信されます。KB_DEADLINE_HOUR で時刻を設定してください(デフォルトは7で、コンテナのローカル時刻です)。既読の通知は30日後に削除されます。
メール通知チャンネルは利用可能な状態ですが、SMTPを設定するまで有効になりません(下記を参照)。それまでは設定画面でグレー表示されます。
タイムゾーンと定期テンプレート
テンプレートを設定すると、プロジェクトを自動的に作成できます(例:「毎週月曜日」や「毎月N日」)。「月曜日」や作成時刻を現地時間に合わせるには、.env で次のように設定してください。
TZ=Europe/Prague # your time zone (empty = UTC)
KB_AUTO_HOUR=5 # the hour (0–23) from which projects are created on a given day
- サーバーがその時間帯に停止していた場合、プロジェクトは同じ日の次の時間帯に作成されます。スキップされることはありません。
- このタイムゾーンはインスタンス全体に適用されます。複数のタイムゾーンにまたがるチームでも、各ユーザーのタイムゾーンではなく、サーバーのタイムゾーンが使われます。
- 繰り返しタスク(完了時に期限を先に移動する処理)は、意図的にUTCで計算されるため、日付をまたいだり夏時間が切り替わったりしても、期限が1日ずれることはありません。
データとバックアップ
すべてのデータは ./pb_data フォルダー(SQLiteとアップロード済みファイル)に保存されます。付属のスクリプトを使ってバックアップしてください。
./backup.sh # creates kb-backup-YYYY-MM-DD.tgz
./backup.sh restore FILE # restores data from a backup
(手動で行う場合は、バックアップ時に pb_data フォルダーをコピーし、復元時に元の場所へ戻します。)
バックアップは暗号化できます。KB_BACKUP_PASSPHRASE を設定すると、スクリプトは kb-backup-….tgz.gpg(GPG、AES-256)を書き出します。restore は暗号化されたアーカイブと、以前の形式の平文アーカイブの両方に対応しています。パスフレーズはサーバー外で保管してください。パスフレーズがないと、誰もバックアップを読み取れません。
すべてのデータを持ち出す
マイアカウントにはすべてのデータをダウンロードがあります。これは、確認できるすべてのプロジェクトを含む1つのJSONファイル(killbottleneck.export/1)です。各プロジェクトは単一マップのエクスポートと同じ形式なので、別の場所にインポートできます。さらに、タスク、ルール、コメント、変更履歴、添付ファイル一覧、アイデアのストック、時間記録、外部連絡先、通知も含まれます。トライアルの期限が切れた後でも利用でき、エクスポートからデータをアップロードすると、別のインスタンスにプロジェクト(ルールを含む)とアイデアのストックを戻せます。セルフホストする場合は、アップロード済みファイルを含む pb_data フォルダー全体をバックアップする ./backup.sh も利用できます。
チーム
1つのインスタンスにつき1つのチームです。ロールは次のとおりです。管理者(ユーザーとロール、組織設定(名前とロゴ)を管理します)、マネージャー(メンバーを招待し、すべてのタスクを表示・管理します)、メンバー(自分のタスクと共有されたマップを利用します)。管理者とマネージャーには、チームと共有プロジェクトを俯瞰する組織ビューも上部バーに表示されます(プライベートプロジェクトは集計されません)。管理画面から、またはタスクページから直接、ユーザーを招待できます。
登録と登録キー
最初に登録したアカウントが管理者になります。インスタンスにインターネット経由でアクセスできる場合は、.env で KB_SETUP_CODE を設定してください。以降、登録には毎回このキーが必要になるため、アドレスを知っているだけの人がアカウントを作成することはできません。アクセスを許可したい人にキーを渡してください。また、管理者はユーザーを直接招待することもできます(招待にはキーは必要ありません)。空欄の場合、キーなしで登録できます。
Google でサインインする(任意)
メールアドレスとパスワードの代わりに、Google でサインインできます。設定するには:
- Google Cloud Console で API とサービス → 認証情報 → 認証情報を作成 → OAuth クライアント ID → タイプを ウェブ アプリケーション にします。
- 承認済みのリダイレクト URI に次を追加します:
https://YOUR-DOMAIN/api/oauth2-redirect - クライアント ID と クライアント シークレット を
.envにコピーします:KB_GOOGLE_CLIENT_ID=…apps.googleusercontent.com KB_GOOGLE_CLIENT_SECRET=… docker compose up -dを実行すると、「Google でサインイン」ボタンが自動的に表示されます。
変数が空の場合、Google サインインは無効になり(ボタンは表示されません)。登録キーが設定されたインスタンスでは、Google サインインを利用できるのは既存のユーザーのみです。Google 経由ではキーを入力できないため、新しいアカウントは作成できません。先にキーを使ってアカウントを作成する必要があります。
目標に添付する:ファイルまたはリンク
任意の目標にアップロードしたファイルまたはリンク(Drive、OneDrive、SharePoint、特定のメールなど、https:// で始まるもの)を添付できます。リンクには、容量を使わない、チームが常に最新バージョンを開ける、ファイルを保管場所に置いたままにできる、という3つの利点があります。
アップロードしたファイルが使用できる容量は KB_FILES_MB で決まります。これはプロジェクトごとではなく、インスタンス全体に適用されます:
| 値 | 動作 |
|---|---|
| 空欄 | 無制限(セルフホストの場合のデフォルト。ディスク容量はご自身で管理します) |
| 数値 | 上限を MB で指定します。例:5000 = 5 GB |
0 | アップロードを無効にし、リンクのみ添付できます |
ホスト型インスタンスでは 0 に設定されています。これにより、プロバイダーがお客様のドキュメントを保管せず、リンクのみを保持します。リンクは http:// または https:// で始まる必要があります。ネットワークドライブのパス(\\server\folder)はセキュリティ上の理由からブラウザーで開けないため、説明欄に記載してください。
メール(SMTP、任意)
SMTP は PocketBase の管理 UI で設定します:http://SERVER-IP:8090/_/ → Settings → Mail
settings(スーパーユーザーアカウントは初回起動時に作成されます。リンクは
docker compose logs で確認できます)。SMTP を設定すると:
- 新しいユーザーへの招待がメールで送信されます(パスワード設定用リンク付き)。SMTP を設定していない場合、管理者には一時パスワードが表示され、手動で渡す必要があります。
- パスワードのセルフサービスリセットが利用できます。
HTTPS(外部からのアクセス)
killBottleneck 自体は HTTP で動作します。LAN の外部からアクセスするには、VPN またはリバースプロキシを使用してください。Caddy(HTTPS 証明書を自動発行)を使った例:
# Caddyfile
killbottleneck.your-domain.com {
reverse_proxy 127.0.0.1:8090
}
docker-compose.override.yml を使って compose に追加してください(このファイルはアップデートで上書きされません):
services:
caddy:
image: caddy:2
ports: ["80:80", "443:443"]
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
volumes:
caddy_data:
HTTPS にすると、「My day」の画像の共有…(Web Share API。サードパーティサービスを使わず、スマートフォン標準の共有ダイアログを表示)や、アプリをスマートフォンのホーム画面に追加する機能(サービスワーカーはセキュアコンテキストでのみ動作)が利用できるようになります。ブラウザーでは、通常の HTTP 接続でこれらの機能を利用できません。HTTPS ドメインでは設定不要で自動的に表示されます。
プロキシで圧縮を有効にする — 容量を3分の1に削減できます
killBottleneck はレスポンスを圧縮しません(リクエストボディが大きすぎて API が拒否した場合の動作を損なわずに、PocketBase で安全に有効化する方法がないためです)。フロントエンドのメインファイルは非圧縮で 488 kB、gzip 圧縮で 157 kBです。モバイルデータ通信では、初回起動時に特に違いを実感できます。1行追加するだけです:
# Caddyfile
killbottleneck.your-domain.com {
encode gzip zstd
reverse_proxy 127.0.0.1:8090
}
(nginx の場合:gzip on; gzip_types application/javascript text/css;。Cloudflare などのサービスを経由する場合は自動的に圧縮されるため、設定は不要です。)
更新
git pull # or download the new version
docker compose up -d --build
データベースのマイグレーションは起動時に自動で実行されます。大規模な更新の前には、バックアップ(./backup.sh)を取っておくことをおすすめします。
必ず
--buildを指定してください。アプリとサーバー側のロジックはイメージに組み込まれているため、コード変更やTZなどの.env変数の変更を含むすべての更新後に、単なるrestartではなくdocker compose up -d --buildを実行する必要があります。
v0.11 以前のバージョンから更新する場合のみ: 製品名の変更後、コンテナ名は flowmap から killbottleneck になりました。古いコンテナがポート 8090 を使用しているため、新しいコンテナが起動できません。まず古いコンテナを停止して削除してください。
docker rm -f flowmap
docker compose up -d --build
データはコンテナ内ではなく、ディスク上の ./pb_data フォルダーにあります。そのため、データが失われることはありません。.env 内の FLOWMAP_* 変数は引き続き使用できるため、書き換える必要はありません。
注意事項
- マップへの公開リンクで共有されるのはマップキャンバスのみです。タスクやタスクのコメントは表示されません。
- ライセンス:フェアコード — Sustainable Use License(下記のライセンスセクションを参照)。
ライセンス — フェアコード
killBottleneckは、厳密な(OSIの定義による)意味での「オープンソース」ではありません。そのことは率直にお伝えしています。killBottleneckはフェアコードです。ソースコードは公開されており、ダウンロード、実行、変更、利用が可能で、大多数の方にとって、従来のオープンソースと同じメリットがあります。従来のオープンソースにできる部分は、スキンエディター(MIT)と、バリデーターを含むスキンギャラリー全体(CC0)です。
チームでのコラボレーションやAI機能を含め、killBottleneckの全機能をご利用いただけます。 機能を絞った「無料版」も、ペイウォールでロックされた機能もありません。AIを無料でご自身で動かすこともできます。お使いのマシンで独自のモデル(Ollama)を動かすか、ご自身のAPIキーをご利用ください。ホスト型クラウド(AIを含む)を提供しているのは、killBottleneckを実行する場所がない方のための利便性としてのみです。これは利便性のためであり、利用条件ではありません。
killBottleneckでできること — 無料で、制約もありません:
- ご自身のコンピューターやサーバーで実行できます。データはご自身のもとに留まります。
- 会社で、ご自身の業務やチームのために、制限なく利用できます。
- ご自身のAI(ローカルモデルまたはご自身のAPIキー)を接続することも、AIをまったく使わないこともできます。
- 必要に応じて自由に変更できます。
- killBottleneckを活用したサービス(セットアップ、コンサルティング、クライアント向けのカスタマイズ)を提供できます。
当社が独占すること — killBottleneckの継続を支えるもの:
- killBottleneckをホスティングし、アクセスに対して料金を請求すること。
- ホワイトラベル化し、他社のブランドで公開すること。
- 有料サービスとして再販売すること。
これが当社の事業です。新機能の追加、バグ修正、killBottleneckの継続を可能にしています。killBottleneckを基盤に開発し、必要に応じて活用していただくことを積極的に推奨します。ただし、競合するホスト型サービスに転用しないでください。詳細な条件はLICENSEをご覧ください。サードパーティーのコンポーネントには、それぞれ元のライセンス(MIT、Apache-2.0、BSDなど)が適用されます。ライセンス文を含む一覧はTHIRD-PARTY-LICENSES.mdをご覧ください。
権利者: Tengo, s.r.o., ID No. 03339165, Dolní Valy 205, 262 72 Březnice, Czech Republic。killBottleneckをサービスとしてホスティングしたい場合、ご自身のブランドで提供したい場合、または再販売したい場合は、ライセンスで許可されていません。ただし、商用ライセンスをご用意しています。[email protected]までお問い合わせください。
このセクションのチェコ語版はREADME.cs.mdにあります。
Richard Pobrislo(LinkedIn、Ctrl+Alt+AI)が開発しています。開発者は一人のため、サポート窓口は以下のとおりです。
コードは人間の指示のもと、100%AIによって作成されています。使用したAIはClaude Fable 5、Claude Opus 5、Claude Opus 4.8です。各リリースは、自動回帰テストと手動での一通りの操作確認を経て公開されます。リリースノートには、確認した内容と、意図的に確認していない内容が記載されています。
お問い合わせ
| 窓口 | 用途 |
|---|---|
| GitHub Issues / Discussions | バグや改善案 — 他の方も確認できるよう、公開の場で受け付けています |
| [email protected] | セキュリティに関する問題(公開のIssueには投稿しないでください)— SECURITY.mdをご覧ください |
| [email protected] | 有料プラン:ホスト型インスタンス |
| [email protected] | 商用ライセンス — サービスとしてのホスティング、ホワイトラベル、再販売 |
| [email protected] | その他すべて |
外部のコントリビューターからのコードは受け付けていません(CONTRIBUTING.mdをご覧ください)。アイデアやバグ報告は受け付けており、歓迎します。
プロジェクトを支援する
killBottleneckはフェアコードです。製品全体(すべての機能)はセルフホストで無料で利用でき、今後もその方針を維持します。お役に立てた場合は、ぜひご協力ください。
- チュートリアルやAIニュースを配信するYouTubeチャンネルをフォローする。
- Discordに参加する。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。