Forme JobHub は、就職活動の個人運用データをローカル中心で整理するためのアプリです。 Gmail から取得したメール、応募記録、求人ソース、面接メモ、digest を一つのローカル環境で扱います。
設計メモは docs/job-operations-design-ja.md と docs/architecture.md を参照してください。 公開前チェックは docs/public-release-checklist.md を使います。
- Gmail OAuth を使ったメール同期
- SQLite ベースのローカル状態管理
- 応募、サイトアカウント、面接メモ、求人一覧のダッシュボード
- 求人ソースの seed / scan
- Markdown digest 生成
- MLX ベースの任意ローカル LLM 要約
launchd用テンプレートの生成
app/
auth/google-oauth/
config/source_registry.json
data/
docs/
ops/launchd/
scripts/
cd /path/to/forme-local
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
cp .env.example .env
python -m app.cli init-db
python -m app.cli seed-demo
./scripts/open-dashboard.sh./scripts/open-dashboard.sh はブラウザを開き、必要なら Forme ダッシュボードだけを起動します。
他プロセスが同じ port を使っている場合は kill せずに停止します。
ラッパースクリプト (scripts/*.sh) と python -m app.cli ... は、repo 直下の .env と .env.local を自動読込します。
同じキーが両方にある場合は .env.local を優先し、すでに export 済みの環境変数は上書きしません。
python -m app.cli show-config
FORME_DASHBOARD_PORT=9000 ./scripts/start-dashboard.shサポートされている変数は .env.example を参照してください。
GCP_ACCOUNT_EXPECTED は scripts/gcp-bootstrap.sh 用、FORME_AUTO_DIGEST_WITH_LOCAL_LLM は scripts/build-digest.sh 用です。
- Google Cloud で Gmail API を有効化します。
- Desktop OAuth client を作成します。
credentials.jsonをauth/google-oauth/credentials.jsonに置くか、FORME_GMAIL_CREDENTIALSで場所を指定します。- 初回認証後の token は
auth/google-oauth/token.jsonに保存されるか、FORME_GMAIL_TOKENの指定先に保存されます。
初回フル同期:
./scripts/first-gmail-sync.sh増分同期:
./scripts/sync-mail.sh
python -m app.cli sync-gmail-auto
python -m app.cli sync-gmail-incrementalフル同期を手動でやり直す場合:
python -m app.cli sync-gmail-full
python -m app.cli list-mail --limit 10scripts/sync-mail.sh のログは data/logs/mail-sync.log に残りますが、メール件名や差出人一覧は出力しません。
通常の digest:
./scripts/build-digest.sh
python -m app.cli build-digestローカル LLM を使う digest:
FORME_AUTO_DIGEST_WITH_LOCAL_LLM=1 ./scripts/build-digest.sh
python -m app.cli build-digest-localpython -m app.cli init-db
python -m app.cli seed-sources
python -m app.cli seed-demo
python -m app.cli build-digest
python -m app.cli build-digest-local
python -m app.cli migrate-raw-to-blobs
python -m app.cli summarize-note-local --note-id 1
python -m app.cli scan-sources
python -m app.cli scan-sources --include-login-required
python -m app.cli sync-gmail-auto
python -m app.cli sync-gmail-full
python -m app.cli sync-gmail-incremental
python -m app.cli list-mail --limit 10
python -m app.cli show-config- ダッシュボード起動:
scripts/start-dashboard.sh - ダッシュボードをブラウザで開く:
scripts/open-dashboard.sh - 初回 Gmail 同期:
scripts/first-gmail-sync.sh - 定期 Gmail 同期:
scripts/sync-mail.sh - ソーススキャン:
scripts/scan-sources.sh - digest 生成:
scripts/build-digest.sh [manual|morning|evening] - launchd plist 生成:
scripts/render-launchd-plists.sh [output-dir] - GCP ブートストラップ:
scripts/gcp-bootstrap.sh <project-id> [project-name] - MLX モデル準備:
scripts/install-mlx-gemma.sh - 面接メモ要約:
scripts/summarize-note-local.sh <note-id>
cd /path/to/forme-local
./scripts/render-launchd-plists.sh
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.forme.jobhub.mail-sync.plist
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.forme.jobhub.source-scan.plist
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.forme.jobhub.digest-morning.plist
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.forme.jobhub.digest-evening.plist公開リポジトリにはマシン固有パスを含む .plist を直接置かず、ops/launchd/templates/ のテンプレートから各マシンで生成します。
digest 用テンプレートは scripts/build-digest.sh morning|evening を実行し、メール送信はしません。
auth/,data/,playwright/.auth/,.env,.env.localは公開しません。- 実メール、実ログ、実カレンダーの画面キャプチャはそのまま載せません。
- 実運用の launchd
.plistは tracked せず、テンプレートから生成します。 - 公開前に
./scripts/preflight-github-check.shを実行します。