Workspace notes
Context-v
Specs, plans, explorations, and habits from across the workspace — the durable thinking that lives next to the code. Convention from lossless-monorepo/context-v.
-
Research Agent Concatenates Multiple Sources Under One Citation ID — And No Validator Catches It
`research_enhanced.py` writes several sources onto one `[^N]:` line, so downstream parsers keep the first and silently drop the rest.
-
Section Citations Orphaned When Definitions Live in 1-research/
`consolidate_citations.py` reads `### Citations` only inside section files, so defs living in `1-research/` become orphans.
-
Grill Me: A Per-Section User-Input Moment in MemoPop Runs
A pause-point where MemoPop grills the user — the competitive section's synthesis frame is a judgment the model shouldn't make alone.
-
Human-Curated Source Sets and Per-Firm RAG for Memo Narrative
Keep Perplexity's take as quarantined commentary and route real research through validated harvesters plus a per-firm standing RAG store.
-
Curating Only Valid Sources Across Runs
Downstream curation cannot fix what `citation_enrichment.py` invents upstream — 65 fabricated `example.com` URLs in a single run.
-
Separating Retrieval from Generation in Agent Pipelines
An agent that both searches the web and writes the prose fabricates URLs — 65 `example.com` links in a single memo run.
-
Migrate `studies/open-specs-and-standards/` into its own pseudo-monorepo
-
Crawl for Better Team Structured Output
The orchestrator writes prose about teams but never returns the structured roster the app needs to render cards: names, titles, photo URLs.
-
MemoPop AI — Ideogram OG Image Brief
A house-style Ideogram prefix and suffix any scene description plugs into, so splash, changelog, and context-v imagery stay one family.
-
Moving an Agent Orchestrator to an API
The orchestrator is a Python CLI today. To plug it into memopop-native, we need an HTTP-shaped surface. Three options, ranked by effort and time-to-value.
-
Introducing a Content Density Mode System
A system-level content mode toggle (redundant vs concise) that alters the behavior of the writer, table generator, and quality agents to match different firm preferences for information density and repetition.
-
Introducing a Diagram Generator Agent
Add a diagram_generator.py agent that identifies opportunities to create visual diagrams explaining complex business concepts, starting with TAM/SAM/SOM market sizing and expanding to common finance and consulting visuals.
-
PDF Parser Agent Specification
A small specification for an agent and script to parse PDFs and convert them to markdown with properly formatted citations.
-
Preferred Format for Changelog
-
Portfolio Listing Agent and Current Portfolio Section
Design notes for the portfolio_listing_agent that builds a Current Portfolio subsection and structured JSON for LP-commit emerging manager fund memos.
-
Multi-Agent Orchestration for Investment Memo Generation
An exploration into using AI supervisors and specialized agents to generate high-quality content and documents.
-
MemoPop as a Claude Connector
Clients won't open our app. They'll ask Claude, and Claude will reach their deals, sources, and memo history through a connector.
-
Host the Connector on Railway at memopop.didi.sh
The connector gets its own subdomain pointed straight at Railway. No domain to buy, and no proxy in front of streaming.
-
No Tool Ships Without Its Docs and Tests
MemoPop's connector is our first API, so it sets the habit: every tool has docs written for agents, CI tests, and a live health check.
-
One Workspace per Firm, with a Private Bucket
Each client firm gets one workspace on our server holding all its deals, plus a private bucket of its own for originals and backups.
-
Sign In Through didi.sh OAuth
Partners sign in once with their didi.sh account, and the token says which firm they belong to. didi.sh has to grow OAuth first.
-
The Client's Claude Does the Work
In v1 we pay for almost no model calls. The partner's own Claude writes the memo; MemoPop supplies the method and keeps the work.
-
The Server Hands Claude the Method One Step at a Time
Claude never holds the whole pipeline. It asks for the next step, does it, hands back the artifact, and asks again.
-
Three Kinds of Error, and Optional Steps Never Block
A blocked memo is the worst outcome. Every error says whether MemoPop is down, the request is wrong, or the step can be skipped.
-
jj Versions Text, and a Save Snapshots to the Bucket
Every draft is versioned without the client touching version control, and a single save backs the whole workspace up.
-
Every Step Writes Its Output To File
A run's destination folder is decided before the first step, and every step writes its result there as it finishes. Nothing lives only in memory.
-
Long-Running Is Not a Reason to Fan Out
Duration is not the variable that decides whether work should be split across agents. Continuity is. Ask before parallelizing anything whose quality depends on what came before it.
-
Normalize Labels Gradually
One company says Total Revenue, another says Gross Revenue, a third says Top Line. One reports monthly, another quarterly, another H1/H2, another only annually. Collection never touches any of it. Normalization is a later, corpus-level act — a cluster of labels that mean the same thing, one chosen default, and an alias map — built by a person from real analysis across real portfolios, never by an agent guessing from what the words sound like.
-
Round-Closing Timeline Nuances
Wires arrive before and after the close they belong to, rounds close later than anyone planned, and a fund and its SPV subscribe months apart on identical terms. None of that is an anomaly. Record every date as the document states it, never revise one to make a sequence tidy, and confine anomaly-noticing to the handful of series that are actually real at this stage — money spent, web traffic, signed contracts, billed subscription revenue. Everything else is a claim or a projection, and instinctive concerns about it belong in anomalies.json rather than in the memo or the conversation.
-
Reconciling Perplexity Citations Against Retrieved Sources
Sonar hands us the sources it actually retrieved on every call, and we throw them away — so every URL in every memo is a guess.
-
agent skills/setup new firm/SKILL
End-to-end procedure for onboarding a new VC firm into the memopop investment-memo orchestrator. Five phases — (1) brand acquisition via Firecrawl with analyst-override on the primary-color heuristic, (2) firm-directory scaffolding under io/<firm>/ with the canonical configs/templates/assets/deals layout and the strict brand-config YAML schema, (3) investment-framework outline selection (typically forking an existing outline like alpha-partners-7-Cs and customizing — section reordering, preambles, preferred-source swaps, stage-aware fallbacks), (4) first deal setup with deck-input handling (DocSend capture via cli/capture_docsend.py, ImageMagick screenshot stitching for NDA-gated decks, deal-config JSON, codified Sources.md), and (5) optional private-repo split via gh CLI with submodule re-add for confidential firm data. Use whenever the user says "I have a new client/firm/VC," "set up <firm name>," "add <firm> to memopop," "we need brand configs for <firm>," or pastes a VC firm's URL with implicit intent to generate memos for them. Encodes lessons from the alpha-jwc onboarding on 2026-06-07 — don't trust Firecrawl's primary-color field blindly, verify against the logo palette; the deck analyst will extract DocSend watermarks as the company name if you feed it watermarked screenshots; agents leak firm-geography context into company-analysis prose (Alpha JWC = Indonesia VC → Portland-OR company memo gained Indonesia/rupiah risks); citation-enrichment fabricates example.com URLs even in codified-source mode — codified Sources.md only constrains the upstream researcher, not the downstream enricher. Cross-references [[crawl-fetch-ingest]] for portfolio/team data, [[sources-md-curation]] for the Sources.md file mechanics, and the open issues in context-v/issue-resolution/ ([[Limiting-or-Omitting-Investor-Judgement]], [[Competitive-Research-Generated-But-Not-In-Prose]], [[Including-Comparable-Exits-Valuations-IPOs]]) for known failure modes the new firm's first run will hit.