Onboarding Tooling and Discovered-Pattern Backlog from a Week of Firm Setups
The last six days surfaced enough orchestrator-level work to log: a new agent-skill that codifies the end-to-end procedure for onboarding a VC firm (setup-new-firm), two CLI scripts for capturing DocSend decks programmatically, three issue-resolution write-ups naming real pipeline gaps the recent runs exposed (competitive research not flowing into prose, missing exit-comp agent, unsolicited investor verdicts), one new spec for per-deal analyst focal points, and a small skills-directory rename (skills/ → agent-skills/) to match the parent repo's convention. Also adds a changelog-scope discipline to CLAUDE.md so firm-private content stays out of the orchestrator's log.
new(skill): context-v/agent-skills/setup-new-firm/SKILL.md
new(cli): cli/capture_docsend.py, cli/_docsend_diag.py
new(issue-resolution): three write-ups naming pipeline gaps
new(spec): context-v/specs/Per-Deal-Focal-Points.md
move(skills): context-v/skills/ → context-v/agent-skills/
docs(CLAUDE.md): add "Changelog scope" section drawing the line
between orchestrator-level entries and firm-private content
Pattern: each item below came out of real firm-onboarding work over
the last week. The discoveries are reusable across firms; the deal
content that surfaced them is not — it lives in the firm-private
io/<firm>/ submodules.
* context-v/agent-skills/setup-new-firm/SKILL.md — five-phase
procedure for onboarding a new VC firm: (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 the new
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. Encodes specific lessons from the
alpha-jwc onboarding: don't trust Firecrawl's primary-color field
blindly, verify against the logo palette; the deck analyst
extracts 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).
* cli/capture_docsend.py — Playwright-based capture of DocSend decks
to PDF, page-by-page screenshot then PyMuPDF assembly. Supports
both direct-share links (no email gate) and standard links with
--email gating. Explicit NDA-gated-deck limitation in the
docstring: those need manual screenshotting in an authenticated
browser. The complementary cli/_docsend_diag.py is a diagnostic
v2 with anti-WAF tweaks, form-scoped gate selectors, and a
post-submit DOM dump for when capture_docsend fails on a new
DocSend variant. Used during the alpha-jwc onboarding; will be
the default deck-input path for new firms.
* context-v/issue-resolution/Competitive-Research-Generated-But-Not-In-Prose.md
— the competitive landscape evaluator agent produces rich, named,
evidenced competitor data (9+ companies per memo, with funding,
differentiation, direct/indirect classification) and saves it to
disk; the writer agent that drafts Category Leadership never sees
that file. The section emits <needs-source> markers asking for
"names of the top 3-5 competitors" while the named list sits two
directories away. Issue write-up names the gap and proposes a fix
in the writer's outline preferred_sources block.
* context-v/issue-resolution/Including-Comparable-Exits-Valuations-IPOs.md
— no dedicated agent for exit comparables (IPOs, M&A, secondaries
for adjacent/analogous companies). The Cash on Cash Return
Probability section renders bull/base/bear scenarios anchored to
nothing verifiable because it's left to fish for comps through
the generic research path that produces the URL-hallucination
problem. Issue write-up scopes a dedicated comps agent.
* context-v/issue-resolution/Limiting-or-Omitting-Investor-Judgement.md
— the pipeline renders unsolicited PASS / CONSIDER / COMMIT
verdicts at the end of Cash on Cash Return Probability and Closing
Assessment even when the analyst's job is advocacy for IC, not
adjudication. An automated PASS in that context is worse than no
verdict. Issue write-up proposes a verdict-omission flag for
advocacy-mode memos.
* context-v/specs/Per-Deal-Focal-Points.md — spec for analyst-supplied
ordered bullets that writer agents must respect as load-bearing
emphasis. Analysts know things automated research won't surface
(founder's prior wins, partner-thesis match, IC concern to
preempt). Focal points get the analyst into the prompt as a
first-class input alongside the deck and Sources.md.
* context-v/skills/ → context-v/agent-skills/ — directory rename to
match the parent ai-labs/memopop-ai/context-v/agent-skills/
convention. Moves adhoc-edits-workflow and manage-memo-citations
under the new path. No content changes to either SKILL.md.
* CLAUDE.md — new "Changelog scope" section. Draws the line: this
changelog covers orchestrator code, agents, prompts, outlines,
templates, CLI, docs. Firm-private content (memo versions, brand
configs inside io/<firm>/, deal setups, source curation) lives in
the firm's own changelog inside its private submodule. Submodule
pointer bumps get a one-liner ("Also included: io/<firm> bump to
<sha>"), never a paragraph about what's in that sha. Patterns
discovered while editing client memos (e.g., thesis-bleed cleanup)
belong here as skills/issue-resolution — reference the skill, not
the memo.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>Changelog — 2026-06-14_01
What this entry is
Six days of firm-onboarding work surfaced enough reusable orchestrator-level material — a new skill, two CLI tools, three issue write-ups, one spec, a small directory rename, and a CLAUDE.md discipline note — to log as a coherent batch. None of this entry describes what happened inside any firm-private io/<firm>/ submodule. The deal content that surfaced these discoveries stays in its respective firm's own changelog.
The pattern behind the batch
Setting up the first deal for a new firm (Alpha JWC Ventures) exposed every soft spot in the pipeline at once: deck input was a DocSend-gated PDF the orchestrator couldn't ingest, the firm's brand needed reverse-engineering from a heuristic that picked the wrong primary color, the firm's outline was a fork of an existing outline that needed section reordering, and several agents leaked context they shouldn't have (DocSend watermarks misread as the company name; the firm's geography bleeding into company-specific risk prose; citation enrichment fabricating example.com URLs even in codified mode). Each soft spot got either a fix that lives in code or a written diagnosis that lives in context-v/issue-resolution/. The new setup-new-firm skill is the consolidated procedure that captures what to do, in what order, and what to watch for — so the next firm doesn't get to rediscover all of this independently.
What got built that's reusable across firms
CLI: DocSend capture. cli/capture_docsend.py drives a headless Chromium via Playwright to screenshot a DocSend deck page-by-page and assemble the screenshots into a PDF the existing deck_analyst.py agent can consume. Supports the two URL shapes DocSend ships (direct-share links that need no email gate, and standard links with --email gating). Refuses NDA-gated decks (eSignature required) on principle — the docstring explains that bypassing an NDA would be a contractual violation, and points the analyst at the manual-screenshot + PyMuPDF path for those. The companion cli/_docsend_diag.py is a diagnostic v2 with anti-WAF user-agent tweaks, form-scoped gate selectors, and a post-submit DOM dump for when the main script fails on a new DocSend page variant.
Skill: setup-new-firm. The five-phase onboarding procedure, written so an agent reading the SKILL.md can execute it without re-asking the analyst for context that's been settled. Phase boundaries are deliberate: brand acquisition is its own phase because Firecrawl's primary-color heuristic is wrong often enough that the analyst-override step is a hard requirement, not a fallback. The deck-input phase routes through the new CLI scripts above. The optional private-repo split phase uses gh repo create --private + git submodule add because that's the pattern every existing firm submodule was built with, and inventing a new pattern per firm would fragment the tree.
Issue-resolution backlog. Three write-ups, each naming a real pipeline gap surfaced by recent runs:
Competitive-Research-Generated-But-Not-In-Prose — the competitive landscape evaluator and the writer agent produce/consume the same memo with no pipe between them. The fix is one block in the writer's outline preferred_sources pointing at the evaluator output file.
Including-Comparable-Exits-Valuations-IPOs — Cash-on-Cash Return Probability has no dedicated source for exit comps, so the scenarios it renders are anchored to nothing the analyst can verify. The fix is a dedicated comps agent feeding a structured
2-tables/exit-comps.json.Limiting-or-Omitting-Investor-Judgement — the pipeline emits PASS/CONSIDER/COMMIT verdicts at the end of two sections even when the analyst's job is advocacy. A
--no-verdictflag (or a mode-level switch derived frommemo_mode: "justify") is the fix.
These three issues are now documented, not yet fixed. The fixes are independent and can be picked up in any order.
Spec: Per-Deal Focal Points. Analysts have opinions about a deck before the orchestrator sees it — founder's prior wins, partner-thesis match, IC concern to preempt, the angle that makes this deck worth the partnership's time. The orchestrator's prompts currently treat that input as "notes" — a soft, optional context block. The spec elevates it to a first-class input: a small ordered list the writer agents must respect as load-bearing emphasis. Implementation is deferred; the spec is the contract we'll build to.
Directory rename: context-v/skills/ → context-v/agent-skills/
The parent ai-labs/memopop-ai repo already uses context-v/agent-skills/. The orchestrator was using context-v/skills/ for the same purpose. Renamed adhoc-edits-workflow/SKILL.md and manage-memo-citations/SKILL.md into the new path. No content changes. This is hygiene, not a refactor — keeps the convention consistent across the memopop tree so agents reading either repo's CLAUDE.md don't have to map between two names.
CLAUDE.md: changelog scope discipline
A new "Changelog scope" section, inserted right after "Recent Changes (2025-11-20)" and before "Ongoing Troubleshooting." Draws the line clearly: orchestrator code/prompts/outlines/CLI/docs belong here; firm-private content (memo versions, brand config tweaks inside io/<firm>/, deal setups, source curation, fact-check corrections) belongs in the firm's own changelog inside its private submodule. Submodule pointer bumps get a one-line "Also included" entry, not a paragraph. Patterns discovered while editing client memos can land here as skills or issue-resolution entries — the pattern is reusable; the changelog entry references the skill, not the memo that surfaced it.
This rule existed in practice but wasn't written down. Today's entry is the first one fully respecting it (the original draft of this changelog described a Panthalassa-specific edit; that content has moved to the alpha-jwc submodule where it belongs).
What didn't change
No code in
src/. The pipeline behavior is unchanged.No outline YAML, no template, no brand-config schema.
No agent prompts.
This is a tooling + documentation batch. The fixes implied by the issue-resolution write-ups are deferred and will land as their own commits.
What's next
Pick up at least one of the three open issue-resolution items. Competitive-research → prose is the smallest fix (one outline change) and would land the most quality lift per minute.
Wire
setup-new-firminto the agent-skill discovery path so it auto-loads when an analyst says "set up a new firm."Build the Per-Deal Focal Points spec into the writer's prompt scaffold.
The DocSend CLI scripts will get exercised against the next firm's first deck; expect at least one new DocSend page variant to break
capture_docsend.pyand require a_docsend_diag.pyfollow-up.
References
context-v/agent-skills/setup-new-firm/SKILL.md— the new onboarding skillcli/capture_docsend.py,cli/_docsend_diag.py— the DocSend toolingcontext-v/issue-resolution/— the three new issue write-upscontext-v/specs/Per-Deal-Focal-Points.md— the analyst-input specCLAUDE.md§"Changelog scope" — the rule that shapes future entriesapps/memopop-orchestrator/CLAUDE.md§"Architectural direction (2026-05)" — the pipeline directions this work respects
