← 一覧に戻る

ctx-bucket

GitHub ↗ Swift 最終push: 2026/8/18 10:17

WIP(現在進行中)

Work In Progress

このプロジェクトで現在進行中の作業と、過去のスナップショットを記録する。

現在の状況

(2026-08-17 16:25 更新)

どこまで進んだか: 仕分けサーバーが本番稼働中(投入から約1分で自動 digest)。加えて iOS キャプチャアプリ CtxCapture を旧 ctx-bucket-capture-ios リポジトリから capture-ios/ に履歴ごと吸収し、収集・蓄積が1リポジトリに一本化された。旧 GitHub リポジトリとローカルディレクトリは削除済み。

次にやること:

  1. 朝昼夜のブリーフィング cron(朝7:30 計画 / 昼12:30 ナッジ / 夜21:30 振り返り)を同じサーバーに設置
  2. APNs + 自前 iOS アプリ v1(プッシュ受信+今日ビュー)
  3. アプリに capture 入力を統合(v1.5)、TODO チェックオフ(v2)
  4. 新しい場所(capture-ios/)で Xcode ビルドが通ることを次のアプリ作業時に確認

未決事項: 通知3枠→5枠への拡張タイミング、ブリーフィングの文面設計、APNs まわりの具体(証明書、配布は TestFlight 想定)。


過去のWIPアーカイブ

(新しい「現在の状況」を書く前に、古いものをここに追記でアーカイブする。新しいものが上)

2026-08-17 16:13 時点のスナップショット

どこまで進んだか: 仕分けサーバーが本番稼働。多目的サーバー1の毎分 cron が inbox への push を検知し、約1分で自動 digest(正規化→daily/todo 振り分け→commit & push)される。手動 /digest は日常では不要になった。end-to-end テスト済み(c19a9bc)。

次にやること:

  1. 朝昼夜のブリーフィング cron(朝7:30 計画 / 昼12:30 ナッジ / 夜21:30 振り返り)を同じサーバーに設置
  2. APNs + 自前 iOS アプリ v1(プッシュ受信+今日ビュー)
  3. アプリに capture 入力を統合(v1.5)、TODO チェックオフ(v2)

未決事項: 通知3枠→5枠への拡張タイミング、ブリーフィングの文面設計、APNs まわりの具体(証明書、配布は TestFlight 想定)。

ROADMAP(計画)

ロードマップ

今週

  • 朝昼夜のブリーフィング cron(朝7:30 計画 / 昼12:30 ナッジ / 夜21:30 振り返り+digest 済み確認)を多目的サーバー1に設置

今月

  • 自前 iOS アプリ v1: APNs プッシュ受信+今日ビュー(ブリーフィング履歴・tomorrow.md 表示)
  • 仕分け完了時の「仕分けたよ」即時プッシュ(capture 習慣維持のための応答ループ)

今四半期

  • アプリに capture 入力を統合(GitHub API で inbox/ へ push、v1.5)

いつか

  • TODO チェックオフのアプリ書き戻し(v2)
  • 毎分 cron を GitHub webhook(push 即仕分け)に格上げ
  • 通知を3枠→5枠に拡張(15:30 / 18:30 など)
  • 音声文字起こし対応(必要になったら OpenAI 文字起こし API で)

DECISIONS(意思決定)

意思決定記録

このプロジェクトで下した重要な意思決定を記録する。 最新が上に来る。


2026-08-17: キャプチャアプリは独立リポジトリをやめ ctx-bucket に同居(モノレポ化)

背景: iOS キャプチャアプリを別リポジトリ(ctx-bucket-capture-ios)で始めたが、収集レイヤーだけ管理が分散し、文脈把握もリポジトリをまたぐ必要があった。

決定: git subtree で履歴ごと capture-ios/ に吸収し、旧 GitHub リポジトリと旧ローカルディレクトリは削除。以後キャプチャアプリの開発は ctx-bucket 内で行う。

理由: 利用者は自分ひとりで、3層パイプラインの収集・蓄積を1つのリポジトリで扱えるほうが見通しがよい。subtree なら旧履歴も残るため、リポジトリ削除による損失がない。将来の活用層アプリ(APNs 通知)も同居させる余地ができる。

2026-08-17: 活用層の媒体は自前 iOS アプリ・通知は1日3〜5回

背景: バケツに入れても何も返ってこないと capture 習慣が消える(実際に1週間投入ゼロが発生)。プッシュ型の「つながる媒体」が必要だった。

決定: 通知の受け口は自前 iOS アプリ(APNs)にする。ntfy・Google カレンダー通知・Claude cloud routine は不採用。通知は1日3〜5回(朝昼夜の3枠から開始)、v1 は読み取り専用でチェックオフ等の書き戻しは v2 以降。

理由: 将来の capture 入力・TODO ビューとアプリに統合でき、3層パイプラインが1つの器に収まる。通知頻度が多いため時間帯ごとに役割を変えて通知疲れを避ける設計とする。

2026-08-17: 仕分けは多目的サーバー1の毎分 cron + headless claude

背景: インテーク Mac は常時稼働ではないと判明し、サーバー側での自動仕分けが必要になった。実行エンジンは codex exec 案もあった。

決定: 多目的サーバー1(Lightsail 512MB)の毎分 cron で、リモート HEAD の変化を検知したときだけ pull し、inbox に中身があるときだけ headless claude -p "/digest" を実行する。

理由: digest の手順書が Claude Code スキルとして完成済みで、claude -p ならスキル・WebFetch・画像読解をそのまま再利用できる(codex だと AGENTS.md への移植=二重管理になる)。サブスク OAuth トークンで従量課金も不要。毎分の空振りは ls-remote 1リクエストのみでコストは実質ゼロ。

2026-08-17: 音声文字起こしは仕分け対象外

背景: mlx_whisper は Apple Silicon 専用で Lightsail (x86) では動かず、代替は API 課金か低精度な CPU 版 whisper だった。

決定: 音声文字起こし機能は載せない。音声ファイルが来たらスキップして inbox に残す(スキルの既存フォールバック)。

理由: 現状の capture はテキスト・画像・URL が主で、音声の必要性が薄い。必要になったら OpenAI 文字起こし API の追加で対応可能。

DEVLOG(作業ログ)

開発日誌

このプロジェクトでの作業を時系列で記録する。 最新のエントリが上に来る。


2026-08-17

16:25 - キャプチャアプリのリポジトリ吸収(モノレポ化)

やったこと

  • ctx-bucket-capture-ios(iOS キャプチャアプリ CtxCapture)を git subtree で このリポジトリの capture-ios/履歴ごと吸収(旧3コミットも git log で辿れる)
  • 旧リポジトリに残っていた未コミット分(アプリアイコン PNG / Contents.json / exportOptions.plist)も取り込み
  • ルート CLAUDE.md(ディレクトリ構成・位置づけ)と capture-ios/CLAUDE.md(冒頭)を新構成に更新
  • 旧 GitHub リポジトリ ichirokisanuki/ctx-bucket-capture-ios を削除、 旧ローカルディレクトリ ~/cdev/ctx-bucket-capture-ios も削除(110MB 解放)
  • capture アプリ側の開発メモは capture-ios/.devnotes/ としてそのまま保持

決めたこと

  • キャプチャアプリは独立リポジトリをやめ ctx-bucket に同居させる(DECISIONS.md 参照)

次回やること

  • 新しい場所(capture-ios/)で Xcode ビルドが通ることを次のアプリ作業時に確認

16:13 - 活用層(媒体)の設計相談と仕分けサーバー構築

やったこと

  • 「ctx-bucket と自分がつながる媒体」の設計相談。プッシュ型を先行させる段階論で合意 (ブリーフィング通知 → 自前アプリ、TODOアプリは摩擦を感じてから)
  • 多目的サーバー1に毎分 cron の仕分け worker を構築(/usr/local/bin/ctx-bucket-digest.sh
    • git ls-remote でリモート HEAD 変化を監視、inbox/ に中身があるときだけ headless claude -p "/digest" を実行。LLM 起動は capture 時のみ
    • deploy key(write 権限)~/.ssh/id_ed25519_ctx_bucket、clone 先 /home/ubuntu/apps/ctx-bucket/
    • 認証はサブスク OAuth トークン(~/.config/ctx-bucket-digest.env
    • RAM 512MB のためスワップ 2GB 前提(既設)。Claude CLI・libheif を新規インストール
  • digest スキルを Linux 対応に微修正(heif-convert、inbox 不存在時の扱い)
  • end-to-end テスト成功: capture push 16:00:43 → 検知 16:01:06 → 仕分け完了 16:01:44。 投入から約1分で自動仕分けされる蓄積層が完成
  • 両リポジトリ(ctx-bucket / multi-purpose-lightsail-server1)のドキュメント更新

決めたこと

  • 媒体は自前 iOS アプリ・通知は1日3〜5回(DECISIONS.md 参照)
  • 仕分けエンジンは codex exec でなく headless claude(DECISIONS.md 参照)
  • 音声文字起こしは対象外(DECISIONS.md 参照)

気づき

  • 8/10〜8/17 の1週間 capture がゼロだった。「返ってこないと入れる習慣が消える」の実証。 プッシュ型の媒体と「仕分けたよ」即時応答が習慣維持の鍵になりそう

次回やること

  • 朝昼夜のブリーフィング cron(朝7:30 計画 / 昼12:30 ナッジ / 夜21:30 振り返り)
  • その後 APNs + 自前アプリ v1(プッシュ受信+今日ビュー)

最近のコミット

README

ctx-bucket

自分の生活コンテキストをとにかく突っ込むバケツ。 テキスト・音声・画像・URLを inbox/ に放り込み、Claude Codeの /digest がテキストに正規化して日次ログに積む。

データベースでもナレッジベースでもなく、バケツ。入力時にスキーマも分類も要求しない。

セットアップ

  1. このディレクトリを ~/cdev/ctx-bucket/ に置く
  2. プライベートリポジトリを作ってpush
    cd ~/cdev/ctx-bucket
    git init && git add -A && git commit -m "init"
    gh repo create ctx-bucket --private --source=. --push
    
  3. 音声の文字起こし用にwhisperを入れる(音声を使わないなら省略可)
    uv tool install mlx-whisper   # Apple Silicon推奨
    
  4. claude を起動して /digest と打てば準備完了の確認になる (動作確認用のサンプルが inbox/ に入っている)

使い方

  1. 思いついたら・撮ったら・録ったら、ファイルを inbox/ に放り込む
  2. 1日1回(またはinboxが気になったら)Claude Codeで /digest
  3. daily/ に日次ログ、todo/ にやることリストが育っていく

設計原則

  • 入力ゼロ判断: 突っ込むハードルを上げるものはすべて敵
  • 出口で構造化: 分類・整形・振り分けはdigestの仕事
  • プレーンテキスト+Git: AIに食わせる前提。grepとClaude Codeで後からいくらでも掘れる
  • 元データ不滅: 処理後も attachments/ に原本を残す

ロードマップ

  • iOSキャプチャアプリ(テキスト・録音・共有シート → GitHub API経由でinboxへpush)
  • TODOビューアプリ(todo/ を読み書きする別ビュー。完了項目は「やったこと」としてdailyへ還流)
  • 定期実行(自宅Macでdigestを自動化)
  • 再浮上・活用レイヤーとの接続