Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

An evidence-backed personal strategist that tracks your important questions, finds contradictions and hidden connections in your own history, helps you choose a direction, and later shows you what the outcome taught you.

Positioning: Strategist (lead), architected for Mirror and Chief of Staff. Jurisdiction: US-based operation. Current phase: pre-Phase-0. Docs complete; ready to build.

Structure

second-brain/
├── README.md                        ← index, decisions, next actions
├── CLAUDE-CODE-PROMPT.md            ← paste this into Claude Code to start building
└── docs/
    ├── 01-product-brief.md          ← original brainstorm: thesis, architecture, competitors, cost model
    ├── 02-solo-v1-plan.md           ← rev.2: phases, privacy decision, US legal, cheap stack
    ├── 03-engine-spec.md            ← THE PRODUCT: four horizons, scoring, anti-generic contract
    ├── 04-onboarding-and-retention.md ← cold start, return-trigger psychology, distribution
    └── 05-corpus-bootstrap.md        ← getting data in: AI exports, handwriting, MCP, local-Docker notes

Read order for anyone new: 01 → 03 → 05 → 02 → 04.

To add later: 05-crisis-detection.md (prerequisite for any Mirror positioning), 06-competitive-teardowns.md, evals/ (the regression set).

Decision log

Date Decision Rationale Status
2026-08-12 Do not build on Obsidian; do adopt its format App is proprietary — ToS bars redistribution, derivative works, competing products, and providing a service to others. The format (Markdown + YAML + [[wikilinks]]) is free and unlicensable ✅
2026-08-12 Markdown files are the format of record; Postgres is the index Makes "no lock-in" verifiable, not just promised ✅
2026-08-12 Three positionings = one engine, horizon as a parameter Same capture, atoms, graph. Only output framing differs ✅
2026-08-12 Lead with Strategist; Mirror after v1 pilot + crisis detection Strategist's worst output is boring; Mirror's is harmful ✅
2026-08-13 Strategist runs on all four horizons, not just months Value must arrive day one. Resonance pings fire instantly ✅ Revised
2026-08-13 Privacy: plaintext in Phase 0, encryption boundary from commit #1, envelope encryption before user #2 Crypto is cheap; encrypted columns break search and debugging. The single data-access module is what actually buys the option ✅ Revised
2026-08-13 US jurisdiction: MHMDA + FTC HBNR + FTC §5, no GDPR Operation is US-based. MHMDA's private right of action is the main exposure ✅
2026-08-13 Backfill import is a Phase 0 feature, built before live capture Solves cold start and the validation problem in one move ✅ Revised
2026-08-13 No streaks, no variable rewards, no guilt. Absence = accumulation Streaks punish the people who need this most; the app maps vulnerabilities and must not exploit them ✅
2026-08-13 Publish the format spec as an open standard Best organic distribution wedge; reaches the PKM/Obsidian audience ✅ Direction set
2026-08-13 Python 3.12 everywhere; FastAPI + Jinja + HTMX. Next.js deferred to Phase 2 Engine deps are Python-native with no good JS equivalent (faster-whisper, sentence-transformers, leidenalg, ruptures). Phase 0 UI is a form and a list ✅
2026-08-13 Fully local Docker for Phase 0; Tailscale for phone capture $0, no cloud accounts, nothing publicly exposed ✅
2026-08-13 Catch-up jobs, never scheduled jobs Laptop sleeps. Designing for intermittent availability is free now, miserable to retrofit ✅
2026-08-13 AI chat history: import via official export, not a live connector No read API exists for ChatGPT or Claude history. Anything else is scraping ✅
2026-08-13 Expose the brain as an MCP server (capture / recall / resonance / open_loops) The correct inversion of "connect to ChatGPT." Claude Desktop reaches local servers today; ChatGPT needs a remote one, so that half is Phase 2 ✅
2026-08-13 Handwritten journal ingestion is a Phase 0 importer It's the corpus that exists. Vision model → text + inferred original date ✅
2026-08-14 Gemini 3.6 Flash for extraction + vision; Opus 5 for synthesis + verifier Extraction is high-volume and cheap-model-shaped. Synthesis is the product and never gets downgraded for cost. Provider-agnostic module makes either swappable ✅
2026-08-14 Synthesis becomes event-driven cascade, not cadence-driven Corpus is 34 conversations; weekly cadence over that produces "nothing this week" four times. Tier 0 reflex is free and does the noticing; the LLM only phrases it ✅ docs/07 §1
2026-08-14 1–3 nudges/day, hard cap, no rollover, enforced as a DB token bucket Scarcity is the mechanic. A convention would drift; a row does not ✅
2026-08-14 Coverage model — 9 domains × 38 facets, gap-scored The engine must know what it doesn't know about the user. Also the targeting input for elicitation ✅ docs/07 §2
2026-08-14 Elicitation: engine generates questions against its own gaps Solves the thin-corpus problem and the "engine should lead the conversation" requirement with one mechanism ✅ docs/07 §3
2026-08-14 Frontal Lobe Method ritual as primary capture, spoken → local Whisper Six sections map cleanly onto the ontology; §4→§6 gives an open/close loop inside one session. People say far more than they type ✅ docs/07 §3.3
2026-08-14 Atoms gain modality (lived/imagined/recalled/aspirational) Visualised futures are not history. Without this the engine describes a life the user imagined rather than lived ✅
2026-08-14 Full life coverage now; crisis detection deferred behind a named gate Single user in Phase 0. Gate: no second user until envelope encryption and crisis detection ship. Elicitation denylist on acute-risk topics is in place now, not deferred ⚠️ Deferred — gate tracked in CLAUDE.md §1.11
2026-08-14 Relevance is a score, never a delete Phase 0 doesn't yet know what matters. Low-relevance entries are stored and embedded, excluded from extraction, downweighted in candidates. Re-runnable ✅ docs/07 §5
2026-08-14 Atoms carry 1–3 (domain, facet, weight) labels, not one category Real statements belong to several parts of a life at once. Atoms spanning >1 domain are pre-found structural holes — the bridge_atom view ✅ docs/07 §8
2026-08-14 Detected absences are never surfaced as reminders — they become latent objectives User's call: telling someone what they're neglecting is nagging. Instead a gap silently raises the score of future candidates that would also address it, so the engine answers the gap without ever naming it ✅ docs/07 §9
2026-08-16 Cost dashboard lives at a separate URL (/usage), never on the capture surface A running cost meter in view changes what you are willing to write down ✅
2026-08-16 Retention is earned by output quality. No loss-framing, no manufactured urgency The user raised "play on fear of loss," then rejected it on reflection. An app that maps someone's vulnerabilities must not use them as leverage. Permitted: absence-as-accumulation, the user's own unanswered question, "a year ago today," reflected progress. Test: a user who stops for a month should feel nothing on return but that it is still there and still knows them ✅ docs/10
2026-08-16 Search is atom-first; entries surface because one of their atoms matched Measured, not theorised: chunk search returned a Privacy Policy for "my family." A chunk is a 1200-char window spanning several topics; an atom is one curated claim. Also makes citation honest — the entry arrives with the sentence that caused it ✅ docs/08 step 5
2026-08-16 Only user turns are indexed from conversation imports 61% of the raw index was the assistant talking, and model prose outranks the user's own sentences because it is more fluent ✅
2026-08-17 Coverage priors are biased against the corpus's own skew work.projects and routine.tools get the lowest leverage precisely because the imported corpus is full of them. Rating facets by how much text exists would aim elicitation at the one area already over-covered ✅ docs/08 step 6
2026-08-17 Question cards attach to Freestyle, not a 7th ritual section Freestyle is already the unstructured slot, so an answer flows through extraction with no special-casing. The ritual is a designed artefact, not a form to extend ✅
2026-08-17 A denied coverage cell also gets no generator brief A brief tells the model how to ask about a cell. Writing one for a cell that must never be asked about is not dead code — it is a ready-made prompt for the exact thing the denylist prevents ✅ enforced by test
— Handwriting OCR: hosted (better) vs local (private) Suggested default: hosted one-time batch under ZDR, everything ongoing local ⬜ Open — decide per batch
— Renaming "Frontal Lobe Method" User wants something less clinical. One constant + one template string ⬜ Open — waiting on a name
— Free tier + pricing Deferred to Phase 2 ⬜ Open
— EU users: take them or not? Taking them re-imports GDPR + DPIA. Decide deliberately ⬜ Open

Next actions

1. Request your ChatGPT and Claude data exports. Done — 34 conversations imported. 2. Paste CLAUDE-CODE-PROMPT.md into Claude Code. Done — steps 0–5 built.

  1. Do the ritual daily. This is the one input nothing else can substitute for. One session produces about as many atoms as 10% of the entire AI export, and unlike the backfill it is first-person, dated, and deliberate. The corpus is currently 40 entries; the engine's ceiling is set by it.
  2. Photograph your handwritten journals. One page per image, even light, batched by notebook. Step 12.
  3. Judge the resonances at step 7 before building synthesis. If they are boring, stop and fix retrieval. Don't build the weekly engine on a broken foundation.
  4. Label everything into evals/ from the first output. The labelled set is the moat.
  5. Set up backups before you have anything worth losing.

Hard constraints (do not violate)

  • Never train on user data. Never sell it. Never use it for advertising. These are also the legal shield under FTC Act §5.
  • Every insight cites the specific entries that produced it.
  • Markdown export works from day one.
  • No minors.
  • No diagnosis, no treatment claims, no therapy branding.
  • No dark patterns: no streaks, no variable-ratio rewards, no guilt, no engagement-optimised timing, no loss-framing, no manufactured urgency. If a retention idea would work equally well on someone who wanted to leave, it is the wrong idea.
  • Optimise for "was this true and useful," never for time-in-app.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages