mfbt CLI is a Python-based CLI tool for the mfbt platform, targeting publication to PyPI. It provides both an interactive TUI mode (K9S-style) and traditional subcommands for managing mfbt projects.
- Language: Python 3.10+ (uses modern features: pattern matching, improved type hints)
- Backend: Integrates with mfbt REST API (
{BASE_URL}/api/v1/) - Auth: OAuth 2.1 with PKCE (1hr access tokens, 30-day refresh tokens), plus API key management (
mfbtsk-{uuid}, passed asAuthorization: Bearer {key}) - Config: Global
~/.mfbt/directory stores auth tokens and configuration (no per-project config)
The file openapi.json in the project root contains the full OpenAPI spec for the mfbt backend. Do NOT read this file in full — it is very large. Instead, use Grep or search tools to find specific endpoints, schemas, or parameters as needed.
- Authentication & Configuration — Browser-based OAuth flow with PKCE, auto token refresh + interactive re-auth on 401, API key support. Shared auth flow in
auth_flow.py. Config/auth in~/.mfbt/(schema v2, no per-projectproject_id). - Interactive TUI Mode — Launched when CLI runs without subcommands; K9S-style keyboard-driven navigation: Projects > Phases > Modules > Features. Ralph orchestration integrated via
rkey. - Subcommands —
auth,projects(list, show, create, archive, delete),ralph,tui. Consistent output formatting (table, JSON, etc.) - API Integration Layer — REST client with
on_auth_requiredcallback for auto re-auth on 401. Paginated responses ({items, total, page, page_size, total_pages}), error handling (402 for token limits), job polling, WebSocket support. - API Key Management — CRUD via
/api/v1/users/me/api-keys - Coding Agent Checks —
coding_agents.pyprovides pre-flight checks (agent installed, MCP configured) before Ralph orchestration.
- Projects CRUD
- Brainstorming phases
- Modules, features, and implementations
- Job monitoring:
GET /api/v1/jobs/{job_id} - Thread comments
- MCP config retrieval:
GET /api/v1/projects/{id}/mcp-config - API key management:
/api/v1/users/me/api-keys
- Must work with existing mfbt FastAPI backend
- Support both UUIDs and short URL identifiers
- Handle ISO 8601 UTC timestamps
- Graceful degradation when token limits reached (HTTP 402)
This project uses the mfbt MCP server, which exposes a virtual filesystem (VFS) for navigating mfbt project data. Always call readMeFirst at the start of a session to get the full VFS guide, available tools, and recommended workflow.
- The VFS exposes project phases, modules, features, and implementations as a navigable filesystem
- Use UNIX-like commands:
ls,cat,tree,find,grep,head,tail - Smart metadata on directories guides what to work on next (progress %, next feature, completion status)
- Two feature sources:
system-generated/(AI-created from brainstorming) anduser-defined/(manually created or imported)
/
├── phases/
│ ├── system-generated/{phase}/
│ │ ├── phase-spec/ # full.md, summary.md, by-section/
│ │ ├── phase-prompt-plan/ # full.md, by-section/
│ │ └── features/{module}/{feature}/
│ │ ├── implementations/{impl}/
│ │ │ ├── spec.md # WHAT to build
│ │ │ ├── prompt_plan.md # HOW to build
│ │ │ └── notes.md # Writable learnings
│ │ └── conversations/conversations.md
│ └── user-defined/features/{module}/{feature}/
│ └── (same structure as above)
├── project-info/team-info.json
├── system-info/users/available-users-list.csv
└── for-coding-agents/
├── agents.md # Grounding context (read at session start)
└── mfbt-usage-guide/ # Workflow guides
cat /for-coding-agents/agents.md --branch_name='your-branch'— grounding contextls /→ls /phases/→ drill into phases, modules, features- Read
spec.md(what to build) andprompt_plan.md(how to build) setMetadataValueForKey .../features/{module}/{feature}/ in_progress true— mark as started- Implement the feature
write .../implementations/{impl}/notes.md '<learnings>'— document what you learnedsetMetadataValueForKey .../implementations/{impl}/ is_complete true— mark done (auto-syncs feature status)
- Include
coding_agent_name: "claude_code"andbranch_namein tool calls - Use
summary.mdfor quick spec overviews;by-section/for large specs - Focus on
must_havefeatures first, thenimportant, thenoptional notes.mdauto-feeds intoagents.mdgrounding — document architectural decisions and gotchas- Use
grepto search across specs and prompt plans - For team communication (posting comments), see
/for-coding-agents/mfbt-usage-guide/ - To update status:
in_progresson features when starting,is_completeon implementations when done
- Venv:
.venv/bin/python,.venv/bin/pytest - Run tests:
.venv/bin/pytest tests/unit/ -v - Config functions no longer take
project_root—load_config(),save_config(),load_auth(),save_auth(),init_mfbt_dir(),resolve_config()all operate on~/.mfbt/viaget_mfbt_dir().TokenManager.__init__takes onlybase_url. - API response formats: List endpoints (
/features,/implementations) return paginated{"items": [...], "total": N, ...}— always extract viabody["items"]. Some endpoints (/brainstorming-phases) return plain lists. Seesrc/mfbt/tui/data_provider.pyfor the canonical parsing pattern. - TUI navigation: Projects > Phases > Modules > Features (4 levels).
NavigationStatestack depth: 0=projects, 1=phases, 2=modules, 3=features. Phase list shows brainstorming phases + virtual "Orphan modules" entry. - Ralph in TUI: Integrated into main TUI (
rkey), not a standalone app. UsesRalphPanelwidget in#main-contentwithPreflightModalfor agent checks. Standalonetui_app.pydeleted. - Ralph subcommand:
src/mfbt/commands/ralph/— orchestrator, display (console), tui_display (Textual adapter), ralph_widgets (TUI widgets), agent runner, progress (API), prompt builder, types. - Display duck typing:
RalphOrchestrator.displayis typed asAny— bothRalphDisplayandRalphTUIDisplayare structurally compatible (same 8 methods). - Key new files:
auth_flow.py(shared OAuth),coding_agents.py(agent pre-flight checks),tui/screens/phase_list.py,tui/screens/preflight_modal.py,tui/screens/ralph_panel.py,commands/ralph/ralph_widgets.py. - TUI shortcuts:
r= Ralph,ctrl+r= Refresh,d= Describe,enter= Open/Detail,esc= Back,?= Help,q= Quit.