Trajectory - Inner Map
Slug: cursor-mvp-implementation-guide
Source: ~/Downloads/Cursor_MVP_Implementation_Guide.pdf (extract: ~/.cache/gemma14-sources/Cursor_MVP_Implementation_Guide.pdf.txt)
Index: Index - Cursor MVP Implementation Guide
Pipeline: CONSTITUTION - Publishable Asset Pipeline
Mode lean: Authority (product-spec / Cursor-executable engineering brief)
This source is not a multi-turn chat. It is a locked implementation brief written for Cursor: human design constraints encoded as an agent-readable build contract. The “prompt spine” below is the ordered sequence of design locks the document forces, not Q&A turns.
1. Prompt spine (ordered design locks)
| # | Concise lock |
|---|---|
| P1 | One-shot Cursor execution: build this exact Chrome extension spec, nothing adjacent. |
| P2 | Screwdriver, not Swiss Army knife. Phase 1 (MVP) only. |
| P3 | Core capture rule: never ask the user a question during capture. Headless, silent, background. |
| P4 | Constraint check: if removing a feature does not make the product worse, it is not MVP. |
| P5 | Vanilla MV3 stack: background worker, content scripts, Turndown.js, chrome.downloads as the local-write path. |
| P6 | Capture pipeline mind-map: highlight or icon to context menu to DOM extract to Turndown to metadata template to Inbox path to hash queue. |
| P7 | Local Inbox pathing: Memory/Inbox/YYYY/MM/DD/title.md with saveAs: false so no folder dialog appears. |
| P8 | Three capture modes only: entire page, selection, link. |
| P9 | Specialized scrapers for AI chat DOMs (ChatGPT, Claude) plus Readability-style generic fallback. |
| P10 | Duplicate detection: hash URL + content; intercept with “Already captured.” |
| P11 | Non-negotiable Markdown export layout (title, source, date, time, URL, body, browser + capture mode metadata). |
| P12 | Optional instrumentation: Friction Counter micro-modal to Memory/Friction/log.csv. |
| P13 | Philosophy layer: Capture First, Organize Later; offline-first (no cloud, no AI summaries in Phase 1). |
| P14 | Executive exclusion matrix: OCR, voice, tags prompts, Notion, semantic search, collaboration postponed. |
2. Start state
Initial curiosity is not “what features can a clipper have.” It is:
How do I force an AI coding agent (and my own scope appetite) to ship a capture tool that disappears at the moment of discovery?
Conflict underneath:
- Browsers sandbox the filesystem, so “save to my vault/Inbox” usually becomes a dialog or a cloud hop.
- AI chats nest conversation turns in ugly DOMs; generic page scrapers lose the thread.
- The temptation at MVP time is always to add tagging, summaries, sync, search. Each of those reintroduces decision friction at capture time, which is the failure mode this product exists to kill.
Start impulse: write the build contract so Cursor cannot improvise a Swiss Army knife.
3. Transitions (with 2-3 impulses each)
P1 to P2 (one-shot guide to screwdriver frame)
- Director mode: stop agent freelancing before first line of code.
- Rejected frame: “while we’re here, also add…”
- Internal itch: one perfect job beats a half-finished suite.
P2 to P3 (scope cut to capture behavior)
- Convinced: the product is defined by what it refuses to ask.
- Content yanked: any confirm / rename / tag UI at capture time.
- Impulse: silent success is the UX.
P3 to P4 (behavior rule to formal constraint check)
- Stress-test: would the product feel worse if this were gone? If no, cut.
- Director mode: give Cursor a kill switch for “nice to have.”
- Rejected frame: feature completeness as quality.
P4 to P5-P6 (philosophy to architecture + data flow)
- Practical itch: name the few moving parts that make silence possible.
- Convinced: Turndown + downloads API + service worker queue is enough.
- Impulse: draw the pipeline once so nothing side-loads mid-build.
P6 to P7 (flow to Inbox pathing)
- Problem pull: sandbox means no free FS write; dialogs break zero-friction.
- Content locked:
saveAs: false+ dated relative path underMemory/Inbox/.... - Impulse: path is product policy, not a user setting in Phase 1.
P7 to P8-P9 (storage to modes + scrapers)
- Coverage itch: empty space, highlight, and link are different intents.
- Special-case pull: ChatGPT / Claude nest turns; need role-aware selectors.
- Fallback impulse: Readability / body when heuristics miss, still offline.
P9 to P10-P11 (extract quality to dedupe + forever-readable export)
- Resilience itch: double-captures will happen; hash intercept without a wizard.
- Future-self pull: Markdown must survive without the extension.
- Non-negotiable: fixed metadata layout, fenced code, preserved links.
P11 to P12-P14 (export lock to instrument, then exclude)
- Hidden gem impulse: log friction notes before inventing features.
- Philosophy lock: Inbox only; organize later; offline guarantee.
- Matrix impulse: write what Phase 1 is not, so Cursor cannot “helpfully” add it.
4. Inner state arc
| Stage | State |
|---|---|
| Start | Scope anxiety when briefing an agent: it will overbuild unless the contract is sharp. |
| Shift 1 | Quality reframed as subtraction. Screwdriver language becomes emotional relief, not only metaphor. |
| Shift 2 | Capture silence becomes the non-negotiable product feeling; UI questions are treated as bugs. |
| Peak technical | chrome.downloads + dated Inbox path + Turndown + AI DOM heuristics as the minimum resilient stack. |
| Peak product | Forever-readable Markdown template + hash dedupe: local files outlive the extension. |
| Late | Friction Counter as instrumentation for the next wave, not feature creep disguised as MVP. |
| End hunt | A one-page matrix Cursor can validate against: what ships, what is postponed, why offline and zero-question hold. |
What was hunted at the end: a Phase 1 definition sharp enough that removing anything listed would make capture worse, and adding anything excluded would reintroduce friction.
5. Speech habits visible in this source only
- Imperative agent voice: “Do not build…”, “Stick exclusively…”, “CRITICAL”.
- Metaphor as scope weapon: screwdriver vs Swiss Army knife (once, then enforced by matrix).
- Constraint check as a reusable filter sentence.
- Path strings and API flags treated as product language (
saveAs: false,Memory/Inbox/...). - Short section headers that read like build checklist labels, not essay chapters.
- “Hidden gem” for Friction Counter: small, persistent, instrumentation-first.
- Table/matrix thinking for inclusion vs exclusion (Phase 1 vs postponed).
- No emotional narrative, no personal digression: engineering brief tone throughout.
- Capture philosophy in three slogans only: never ask during capture; capture first, organize later; offline-first.
Do not import playful “Wait. Before the map…” loops, poker-face openers, or Gemma 13 experiential textures. This thread stays directive and technical.
6. Write-as-Nitish notes for Final
- Open from the agent-scope problem and the silence-at-capture itch, not from a generic “what is a Chrome extension” lecture.
- Keep solid stack, path, template, scraper selectors, and matrix blocks close to source fidelity.
- Mode: Authority article explaining why the constraints exist, then the locked implementation payload.
- Omit: OCR fantasies, cloud designs, tagging UX, anything the exclusion matrix kills.
- No em dashes or en dashes in new prose.