Feature planning MVP: plans, planning calls, and the notetaker

Merged
CH
14d ago
+23831-1227

Summary

Merges the feature-planning MVP integration branch into main: 46 PRs (#1729 through #1779), each already reviewed and merged into charles/feature-planning-mvp.

  • Named feature plans stored per account with a fixed template, and update_plan (LUKE-334, LUKE-352). Migrations 0049_plan, 0050_voice_session_plan, 0051_plan_fields, 0052_voice_session_detached, 0053_plan_template_reset, 0054_plan_command, 0055_plan_folder_off_service (0053 wipes every plan's document; 0054 drops the repository columns).
  • The planning model runs on the hosted brain over a plan conversation, leads the call, and uses the grilling skill (LUKE-336, LUKE-351, #1747).
  • GitHub connection and repository reads through GitHub's hosted MCP tools, including on Vercel Previews (LUKE-338, LUKE-348).
  • Bounded public web search and page reads for the planning model (LUKE-339).
  • GPT Live connected to the planning model on the selected plan; review by voice, handoff prompt, copy (LUKE-340, LUKE-342).
  • Planning lives in the notch panel's Plans tab; the planning window is removed; Sessions and Conversation tabs are hidden for now (LUKE-347, LUKE-349, LUKE-350).
  • A notetaker writes the plan during a planning call and streams drafts to the Mac, replacing polling (#1748 through #1751).
  • A planning call is seeded with its saved plan; the Mac logs why a voice call ended (#1753, #1754).
  • The planning model explores a real clone of the plan's repository instead of GitHub's MCP file reads (#1757).
  • Hosted voice calls survive longer: the socket is pinged every 30s, and a dropped device socket detaches the call instead of ending it, with an orphan sweep (#1756, #1758).
  • Planning call polish: one question at a time, the repository answers code questions instead of Luke asking, and the plan's typing caret gets its own accent (#1759, #1760, #1761).
  • A standing question queue replaces planning rounds, and each question goes to the voice the moment it's ready; the notetaker writes after either speaker (#1762, #1764, #1768, #1770).
  • The Plans tab says Thinking while the model works, shows the voice and backend separately, tells GPT-Live when Luke reads the repository, and edits the plan like a person at a streaming model's pace (#1763, #1765, #1766, #1767, #1771).
  • Luke opens as an ordinary Mac app window with a Dock tile instead of the notch panel (#1775).
  • GitHub sign-in asks for repo; the plan template is reworked for a coding agent and the handoff prompt is dropped; a stop button and a mute indicator on the plan's call (#1774, #1776, #1778).
  • The planning model reads a local folder on the Mac instead of a GitHub clone: the service queues shell commands that the Mac runs with /bin/bash in the plan's folder, as the user, and returns the output (#1777). This replaces the sandboxed clone from #1757. #1779 runs each command under sandbox-exec with a deny-by-default profile: no network, no writes, reads only in the plan's folder and system paths, .env files refused, and a clean environment.

Evidence

  • Platform-independent checks: CI on this PR
  • macOS Electron verification (./scripts/verify.sh): not run on this merge PR

CI could not verify the Mac side of this change: it runs on Linux only and builds nothing for the Mac. Mac evidence lives in the individual PRs (for example #1738's planning-window capture), not here.

Visual evidence

  • Fixture screenshots inspected: not attached

Physical-device evidence

  • Screenshot or screen recording: not attached
  • Physical-notch check: not performed
  • Device/display configuration: not recorded

Invariants

See each constituent PR. Points specific to the merge:

  • JSON Schema goldens changed: new goldens for the plan, GitHub, and planning tool wire shapes, plus sessionCreateFrame/sessionOpeningFrame gaining the plan field. No existing golden lost a field.
  • PRIVACY.md changed, and it is a product decision: new "Feature plans" and "How the plan is written during a planning call" sections, the allowance line now covers the notetaker, and #1757 adds a disclosure for the repository clone. #1731 marks the wording as proposed, so it needs sign-off before this merges.

Notes

  • Blockers or follow-up verification: sign-off on the PRIVACY.md wording; a verify.sh pass on a Mac against the merged tree.

šŸ¤– Generated with Claude Code


Open workspace in Conductor