Front Office
Front Office
AIとの会話で構築されたプロジェクトのためのデザインオペレーションズのシステム・オブ・レコード:決定ログ、未解決の質問、そして生成されたビューとしてのドキュメント — すべてのセッション(人間またはAI、今日または数ヶ月後、並行または逐次)がチャットのスクロールバックではなく同じ頭脳から作業できるように。
実際の問題から生まれた:長いAIセッションにわたるゲームの設計で46件のログされた決定が生まれ、「それは実際に承認されたのか?」という監査が常に必要だった。Front Officeは監査証跡を主要な成果物にする。
コアアイデア
決定ログはイベントログである。 すべての決定はいつ/誰が/なぜ、来歴タグ —
[A]明示的な人間の裁定 ·[A→C]人間の指示、AIの仕様 ·[C→A]AIの提案、人間が批准 ·[C]AIが想定、有効だが拒否可能 — そしてステータス(✅ 決定済み · 🕐 ドキュメント待ち · 💬 提案中)を持つ。修正は古いエントリを参照する新しいエントリであり、決して編集ではない。未解決の質問はレコードであり、スクロールバックではない。 未回答の項目は解決されるまで追跡されたファイルに存在する — ログエントリとともに。
ドキュメントはビルドである。 コンテキストパックとステータスビューはレコードから生成される。markdownはストレージかつ交換フォーマットであり、ロックインはない — ファイルはツールなしでも有用である。
ライダーガード。 承認された決定に添付された提案は、その承認を決して継承しない。AIが書いたドラフトは常に💬である。
Related MCP server: kb
使い方
npm ci
npm run fo -- status # counts, unratified [C] list, pending rulings
npm run fo -- decisions --provenance C --status decided
npm run fo -- open --section A
npm run fo -- show 12
npm run fo -- pack # writes projects/<p>/context-pack.md
npm run fo -- validate # CI-able: exit 1 on invariant violationsプロジェクトデータはprojects/<name>/に存在し、*decision-log.mdと*open-items.mdを含む(フォーマットはtest/fixtures/を参照)。projects/はgitignoreされている — テナントデータはあなたのものであり、プライベートのままである。 --project <dir>またはFO_PROJECT_DIRで別の場所を指定する。
Web UI
npm run fo -- pack # optional: regenerate views first
npm run web # http://localhost:4747 (FO_PORT / FO_PROJECT_DIR to override)同じファイル上のライブダッシュボード:来歴/ステータスチップとフィルター付きの決定フィード、注意ストリップ(保留中の裁定、未批准の[C])、セクション別の未解決項目、統計 — そしてドラフトフォーム(ドラフトは常に💬)。100% UI/ロジック分離: クライアントはビジネスロジックを一切含まない。すべての派生値は/api/stateから事前計算されて届き、ブラウザはレンダリングとコマンド送信のみを行う。
MCPサーバー(頭脳の接続)
レコードを任意のClaude Codeセッションに公開する:
claude mcp add front-office --scope user -- npx tsx <repo>/src/mcp/server.tsツール:get_context_pack · list_decisions · list_open_items · draft_decision(常に💬) · get_stats。サーバー環境でFO_PROJECT_DIRを設定してプロジェクトを選択する。
アーキテクチャ
プロジェクト自身のドクトリンに従う(はい、その設計決定はFront Officeログで追跡されている):
src/core、src/adapters、src/views— 純粋(厳格な関数型ESLintプロファイル:let/ループ/クラス/ミューテーションなし、クロックとランダム性は注入されなければならない)。src/shell、src/mcp— エフェクトのエッジ(中程度のプロファイル)。パーサーは生のセルを逐語的に保持する → シリアライゼーションは正確にラウンドトリップする(
parse(serialize(parse(x))) ≡ parse(x)、プロパティテスト済み)。
npm run typecheck && npm run lint && npm testMIT。
This server cannot be deployed
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for generating rough-draft project plans from natural-language prompts.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA database-backed MCP server that acts as a project memory bank, enabling AI assistants to store, retrieve, and search structured context like decisions, tasks, and architecture using SQLite and vector embeddings.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceA local MCP server that provides a shared context and learning foundation across multiple AI tools (Claude, Copilot, Codex) for multiple projects, enabling persistent knowledge, decisions, and gap reflection through note storage.MIT
- AlicenseAqualityDmaintenanceAn MCP server that records decisions, rejected alternatives, and justifications, and retrieves them later to avoid re-litigating past choices. It stores data locally in SQLite and Markdown.262 PyPIApache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP server for BRIEF.md that captures decisions, constraints, and questions during AI chats, enabling seamless project re-entry across different AI tools.8 npmMIT