Ray-Starter-Kit — Repo Skeleton Scope (v1)
Scoping doc for the parting-gift kit Ben hands off at the Mammoth Growth AI Demo Day on Wed 2026-05-13. Build is Mon-Tue. This doc names what ships, where each piece comes from, what has to be sanitized, and what gets cut if time runs short.
Recommended repo name + URL
Three candidates considered:
| Candidate | Pro | Con |
|---|---|---|
ray-starter-kit |
Direct, names the agent, matches the prep-plan slot | Reads like a one-person personality cult unless you know Ray-the-COO is the archetype, not the brand |
coo-in-a-box |
Names the role, not the personality. Travels better — the kit isn't about Ray, it's about giving the recipient their own COO | Slightly meme-y; doesn't lean into the harness-engineering vocabulary |
harness-starter |
Honest to the architecture (it's the harness, not the model). Aligns with Osmani / Tobi / Avedissian thesis cluster Ben has been seeding | Won't mean anything to non-readers of that thread; needs the README to do the work |
Pick: coo-in-a-box with ray-starter-kit as a redirect.
Rationale: the parting-gift framing is "here's the recipe so you can build YOUR version." Ray is one instantiation. Naming the kit after Ray confuses the gift (do they get Ray, or do they get to build their own?). coo-in-a-box makes the gift legible without prior context. The README leans on the harness-engineering vocabulary for depth. ray-starter-kit stays as a memorable-to-Ben handle and a redirect for any URL that gets shared from his slides.
Org placement: github.com/RayDataCo/coo-in-a-box. Public. Personal repo (github.com/benwilson/...) reads as a side-project; org placement signals this is a repeated investment for RDCO and gives a clean home if Ray-as-a-Service becomes a real bet.
Top-level repo structure
coo-in-a-box/
├── README.md # The "what is this and why" — distilled from the two concept docs
├── LICENSE # MIT (permissive — gift, not a moat)
├── .gitignore # Standard (state files, secrets, .env, .DS_Store)
├── INSTALL.md # 30-min Day-1 installer walkthrough
├── ONBOARDING.md # The 6-week ratchet doc
├── docs/
│ ├── architecture.md # The 8-layer map (distilled from ray-architecture-introspection)
│ ├── harness-vs-personal-fit.md # The two-layer moat thesis (distilled from harness-moat doc)
│ ├── unhobbling-moments.md # The 13 inflection points + why each matters
│ └── composability-chains.md # The 5 worked-example chains
├── identity/
│ ├── SOUL.template.md # Sanitized SOUL with [[ROLE]] [[VOICE]] [[CHANNELS]] placeholders
│ ├── CLAUDE.template.md # The 4 universal hard rules + commentary
│ └── memory/
│ ├── MEMORY.md # Empty index (the index pattern, no entries)
│ └── README.md # How memory files work + when to write one
├── vault/ # Folder scaffold the operator clones to ~/their-vault/
│ ├── 00-inbox/.gitkeep
│ ├── 01-projects/.gitkeep
│ ├── 02-sops/.gitkeep
│ ├── 03-contacts/README.md
│ ├── 04-finance/README.md
│ ├── 08-tooling/README.md
│ ├── 05-meetings/.gitkeep
│ ├── 06-reference/
│ │ ├── README.md
│ │ ├── concepts/.gitkeep
│ │ └── research/.gitkeep
│ ├── 07-archive/.gitkeep
│ ├── 09-bet-stacks/README.md
│ ├── 10-source-material/.gitkeep
│ ├── decisions.md # Empty append-only template
│ ├── log.md # Empty append-only template
│ └── README.md # Vault discipline + folder semantics
├── skills/ # 12 sanitized skills (the unhobbling set)
│ ├── README.md # How skills work + install instructions
│ ├── check-board/SKILL.md
│ ├── process-inbox/SKILL.md
│ ├── process-newsletter/SKILL.md
│ ├── morning-prep/SKILL.md
│ ├── improve/SKILL.md
│ ├── skillify/SKILL.md
│ ├── self-review/SKILL.md
│ ├── curiosity/SKILL.md
│ ├── deep-research/SKILL.md
│ ├── log-bet-decision/SKILL.md
│ ├── vault-health/SKILL.md
│ └── sync-contacts/SKILL.md
├── scripts/
│ ├── audit-vault-outputs.py # Renamed/generalized from audit-newsletter-outputs.py
│ ├── scheduled-jobs.template.txt # Cron schedule with personal cadences swapped for placeholders
│ └── README.md # When to use deterministic scripts vs LLM skills
├── channels/
│ ├── README.md # Bring-your-own-channel intro
│ ├── imessage-setup.md # Install + LaunchAgent + tmux, sourced from project_channels_agent_setup
│ └── discord-setup.md # Same pattern, Discord variant
└── handout.pdf # Optional 1-page printable for the demo room (cut candidate)
Per-file source map
| Repo path | Source on Ben's Mac | Sanitization needed | Est. lift |
|---|---|---|---|
README.md |
NEW — distilled from 06-reference/concepts/2026-05-10-harness-moat-two-layers-portability.md + 2026-05-10-ray-architecture-introspection.md |
Drop RDCO-internal callouts; lead with the two-layer thesis + 8-layer map; "what you get vs what you earn" framing | 1.5h |
LICENSE |
NEW (MIT) | None | 5min |
.gitignore |
Compose from standard | None | 10min |
INSTALL.md |
NEW | None — write generic | 1h |
ONBOARDING.md |
NEW (the 6-week ratchet — see outline below) | None | 1.5h |
docs/architecture.md |
~/rdco-vault/06-reference/concepts/2026-05-10-ray-architecture-introspection.md |
HEAVY — strip "Why this is in vault / Mapping against RDCO" sections; strip Ben-named cron times; keep the 8 layers + 13 unhobbling moments + 5 composability chains generic | 1h |
docs/harness-vs-personal-fit.md |
~/rdco-vault/06-reference/concepts/2026-05-10-harness-moat-two-layers-portability.md |
HEAVY — same shape; strip founder-specific examples (feedback_calibrate_overconfidence etc.) but keep the two-layer/Layer-1.5 model and the productizable read |
45min |
docs/unhobbling-moments.md |
Sub-section of architecture doc | Trivial extract | 20min |
docs/composability-chains.md |
Sub-section of architecture doc | Trivial extract | 20min |
identity/SOUL.template.md |
~/SOUL.md |
LIGHT — already clean of family/MSA refs. Convert "Ray Data Co" → [[COMPANY]], "founder" → [[OPERATOR]], channel mentions → [[PRIMARY_CHANNEL]]/[[SECONDARY_CHANNEL]], swap "Mac Mini" for [[HOST_MACHINE]] |
30min |
identity/CLAUDE.template.md |
~/CLAUDE.md |
LIGHT — keep the 4 hard rules verbatim (they're universal). Strip the ~/rdco-vault/06-reference/... wikilink in rule #4 (replace with a generic citation note). Strip ben@raydata.co and the founder-name reference in rule #2. Strip "Mammoth Growth" if it appears (it doesn't currently) |
30min |
identity/memory/MEMORY.md |
~/.claude/projects/-Users-ray/memory/MEMORY.md (structure only) |
TRIVIAL — keep ONLY the index format header + 1-2 dummy entries showing the pattern. Zero actual memory files copied | 15min |
identity/memory/README.md |
NEW | None | 30min |
vault/*/README.md (per-folder) |
NEW (referencing existing ~/rdco-vault/<folder>/README.md patterns where they exist) |
LIGHT — convert any rdco-specific examples to generic | 1h total |
vault/decisions.md, vault/log.md |
NEW (empty templates with header pattern) | None | 10min |
skills/README.md |
NEW | None | 30min |
skills/check-board/SKILL.md |
~/.claude/skills/check-board/SKILL.md (65 lines, 6 personal refs) |
LIGHT — replace Notion data_source_id with [[YOUR_BOARD_DATA_SOURCE_ID]]; strip "Ray Data Co" from intro line |
15min |
skills/process-inbox/SKILL.md |
~/.claude/skills/process-inbox/SKILL.md (41 lines, 1 personal ref) |
TRIVIAL | 10min |
skills/process-newsletter/SKILL.md |
~/.claude/skills/process-newsletter/SKILL.md (254 lines, 25 personal refs) |
HEAVY — strip the ~/rdco-vault/01-projects/process-newsletter/README.md whitelist dependency (replace with whitelist.example.yml in repo); strip stratechery / specific-sender examples; keep the discovery/batch/watch mode shapes generic |
45min |
skills/morning-prep/SKILL.md |
~/.claude/skills/morning-prep/SKILL.md (173 lines, 17 personal refs) |
HEAVY — strip all hq.raydata.co URLs (replace with [[YOUR_HQ_HOST]]); strip the dated example outputs (MAC video review etc.); strip the raydata.co domain check — replace with [[YOUR_INTERNAL_DOMAINS]] |
45min |
skills/improve/SKILL.md |
~/.claude/skills/improve/SKILL.md (185 lines, 12 personal refs) |
MEDIUM — strip ~/rdco-vault/01-projects/skill-improvements/ and 01-projects/self-review/review-log.md paths (replace with [[VAULT]]/01-projects/...); strip the wikilink to Garry Tan reference note (it's not in the kit) |
30min |
skills/skillify/SKILL.md |
~/.claude/skills/skillify/SKILL.md (5.4KB, 3 personal refs) |
LIGHT | 15min |
skills/self-review/SKILL.md |
~/.claude/skills/self-review/SKILL.md (156 lines, 2 personal refs) |
LIGHT | 20min |
skills/curiosity/SKILL.md |
~/.claude/skills/curiosity/SKILL.md (89 lines, 10 personal refs) |
MEDIUM — strip Notion Research Backlog DB id (replace with placeholder); strip vault-specific cluster references | 25min |
skills/deep-research/SKILL.md |
~/.claude/skills/deep-research/SKILL.md (151 lines, 12 personal refs) |
MEDIUM — same shape as curiosity; strip 06-reference/research/ hardcoded path (replace with [[VAULT]]/06-reference/research/) |
30min |
skills/log-bet-decision/SKILL.md |
~/.claude/skills/log-bet-decision/SKILL.md (120 lines, 10 personal refs) |
MEDIUM — strip 09-bet-stacks/ references with placeholders; strip Squarely / MAC examples |
25min |
skills/vault-health/SKILL.md |
~/.claude/skills/vault-health/SKILL.md (56 lines, 1 personal ref) |
TRIVIAL | 15min |
skills/sync-contacts/SKILL.md |
~/.claude/skills/sync-contacts/SKILL.md (240 lines, 35 personal refs) |
HEAVIEST — strip raydata.co and mammothgrowth.com internal-domain hardcoded values (replace with placeholder); strip ben@raydata.co; strip Notion Contact Candidates DB id; strip ~/rdco-vault/03-contacts/ paths; replace 01-projects/process-newsletter/README.md reference |
1h |
scripts/audit-vault-outputs.py |
~/.claude/scripts/audit-newsletter-outputs.py (25KB) |
MEDIUM — generalize from "newsletter" to "vault outputs"; rename invariant labels (I8 currently looks for ## Mapping against Ray Data Co — make it look for ## Mapping against [[YOUR_ORG]] configurable via a --mapping-header flag); generalize the venv shebang to #!/usr/bin/env python3; document the 13-invariant pattern |
1.5h |
scripts/scheduled-jobs.template.txt |
~/.claude/scripts/scheduled-jobs.txt (51 lines) |
LIGHT — comment out cadences that depend on operator preferences (6:30am etc.) and add a "// recommended starting cadence" header per line; strip the check-public-ip-drift.sh line (Stripe-specific); strip /finance-pulse line (the kit doesn't ship Monarch integration) |
15min |
channels/imessage-setup.md |
~/.claude/projects/-Users-ray/memory/project_channels_agent_setup.md + the iMessage MCP install instructions |
MEDIUM — strip /Users/ray/ paths; strip Ben's specific tmux session name; document the bring-your-own iCloud + iPhone-pairing requirement; document the 1Password wrapper pattern (per memory: no .env files) |
45min |
channels/discord-setup.md |
Same memory + Discord MCP install | MEDIUM — same shape | 45min |
channels/README.md |
NEW | None | 20min |
handout.pdf |
NEW | None | 1h (CUT CANDIDATE) |
Aggregate: ~14 hours pre-cut. With the v2-deferred items removed (see "Recommended cuts" below), v1 lands at ~10.5 hours. Fits the 8-12 hour budget.
Sanitization risk inventory
Per file, what personal data lives in the source that MUST be stripped before public push:
| File | Risk class | Specifics |
|---|---|---|
~/SOUL.md |
LOW | Already clean of family names. Mentions "Ray Data Co" 3x, "Mac Mini" 1x, "founder" repeatedly. Replace with placeholders. No PII. No Mammoth-Growth. |
~/CLAUDE.md |
LOW | Mentions ben@raydata.co once (rule #2 example needs generalization). One wikilink to a Thariq vault note that doesn't ship. No family, no client. |
Memory MEMORY.md index |
NONE (only index format ships, no entries) | The index references feedback_brief_imessage_link_to_hq.md which mentions "wife teases founder" — that file does NOT ship; only the index PATTERN ships. Confirm zero feedback_*.md files copy through |
| 12 starter skills | MEDIUM-HIGH on a few | Hardcoded paths: ~/rdco-vault/, hq.raydata.co, ben@raydata.co, raydata.co, mammothgrowth.com (in sync-contacts). Hardcoded MCP IDs: Notion task-board data source, Notion Research Backlog DB, Notion Contact Candidates DB. Hardcoded sender examples: stratechery, the K/F whitelist file in 01-projects/process-newsletter/README.md. Recent dated examples: MAC video review, Squarely, etc. |
audit-newsletter-outputs.py |
LOW-MEDIUM | Shebang points at /Users/ray/.claude/scripts/graph-db-venv/bin/python3 — must generalize. Invariant I8 hardcodes "Mapping against Ray Data Co" string — must parametrize. State output path hardcodes ~/.claude/state/ — must use a --state-dir flag. No PII in script logic itself |
scheduled-jobs.txt |
LOW | Personal cadences (6:30am morning brief reflects Ben's wake time). The check-public-ip-drift.sh line is Stripe-allowlist-specific; cut. The /finance-pulse line points at Monarch Money integration not in kit; cut. No PII |
project_channels_agent_setup.md |
LOW | /Users/ray/ paths, tmux session name claude-channels, Mac mini hostname pattern. Generalize all paths. The 1Password wrapper pattern is generic and should be highlighted, not hidden |
| Vault folder READMEs | NONE | NEW writes, no source to sanitize |
| Concept docs (architecture, harness-moat) | MEDIUM | Each opens with "Why this is in the vault" + "Mapping against Ray Data Co" sections that are RDCO-internal. The body is generally publishable but the framing sections must be rewritten as "How to read this doc" + "How to apply to your org". Strip founder-quote-block ("So is operating the only moat...") which references his specific question. Strip closed-source vendor names if any (Monarch Money mentioned in architecture; that line should be generalized to "your finance system MCP") |
Sanity-check pass before publish: run grep -rE "(rdco-vault\|raydata\.co\|mammothgrowth\|ben@\|/Users/ray/\|hq\.raydata\|stratechery\|squarely\|Sophia\|wife\|Mammoth)" coo-in-a-box/ on the staged repo. Should return zero hits. Add this to INSTALL.md as a final pre-publish gate so future updates don't drift.
6-week onboarding ratchet — proposed outline
This is ONBOARDING.md. NEW content. The pitch in the harness-moat doc says: "Compress the calibration period from 6 months to 6 weeks via guided onboarding." This file is the guide.
Day 1 — Minimum-viable Ray (target: 60 min)
- Install Claude Code (link to docs)
- Install one channel MCP (iMessage if Apple-stack, Discord if not). Reference
channels/ - Copy
identity/SOUL.template.mdto~/SOUL.md. Fill[[ROLE]](e.g. "COO", "Chief of Staff", "Strategic Partner"),[[VOICE]](3-5 sentences in your voice),[[OPERATOR]](your name + 1-line context). Don't perfect; ship version 1. - Copy
identity/CLAUDE.template.mdto~/CLAUDE.md. Keep the 4 hard rules verbatim. Add zero personal rules today. - Send your first message via the channel. Confirm it routes back through the reply tool.
- DONE. You have minimum-viable Ray.
Day 2-7 — First crons + first vault entries (target: 30 min/day)
- Day 2: Clone
vault/to~/your-vault/. Add a single decision todecisions.md. Open one project under01-projects/. - Day 3: Install your first cron loop.
/check-boardis the safest first cron — daily Notion sync. Confirms the loop architecture works. - Day 4: Install your second cron —
/morning-prepat 6:30am (or your wake time). This is the first thing that PINGS you without being asked. Recipe-changing moment. - Day 5: First
feedback_*.mdmemory file. Pick something you corrected today and write it as a 5-line file in~/.claude/projects/<x>/memory/. UpdateMEMORY.mdindex. - Day 6: Install
/process-inboxcron (30min cadence). Drop one document in~/your-vault/00-inbox/. Watch it get filed. - Day 7: Recap. Look at your
decisions.md+ memory index + first 3-4 vault entries. The compounding has started.
Week 2 — First /improve cycle (target: 1-2 hr total over the week)
- Install
/self-review(Sun 7am) and/improve autonomous(Mon 7am). The ratchet is now live. - Run
/self-reviewmanually once mid-week to feel what it does. - After Mon 7am, read
~/your-vault/01-projects/self-review/review-log.md. See what/improvepatched. - Write your first 3 deliberate memory files: pick three things from your week's session output that you'd want Ray to do differently. File each. Update the index.
- Add your FIRST personal hard rule to
CLAUDE.md. Earned, not generic.
Week 3-4 — Composability emerges (target: ratchet runs itself)
- Install
/curiosity(Tue+Sat 10pm) +/deep-research(1am nightly). The autonomous research engine now runs. - Install
/process-newsletter watch. Add 2-3 senders towhitelist.yml. Watch briefs land in vault overnight. - The chains start firing without you noticing. By end of week 4 you should have: ~5 morning briefs read, ~5 research briefs in
06-reference/research/, ~10 memory files, ~3-4 personal hard rules in CLAUDE.md. - Drop a screenshot of your
MEMORY.mdindex in your team chat. People will ask what it is.
Week 5-6 — Personal-fit thickens (target: it feels like YOUR Ray)
- Install
/log-bet-decisionand start logging strategic choices to09-bet-stacks/. - Install
/sync-contactsif you want autonomous contact triage (requires Gmail + Calendar MCPs). - Start writing your own skills.
/skillifyis the meta-skill: tell it what failure pattern you saw, it scaffolds the skill. First custom skill is the "I built this" moment. - Run
/vault-healthonce. Read what it tells you. The vault is no longer empty. - By week 6, the difference between "Claude Code I happen to have configured" and "my COO" is undeniable. The personal-fit layer has thickened. The ratchet is yours.
What to expect after week 6
- The kit gave you the universal harness. The next 6 months of operating give you the personal-fit layer that no one else has. That's the moat-at-depth.
- Update upstream: if a kit update lands (
git pull), yourCLAUDE.md+ memory + vault DON'T get clobbered. Only the templates, skills, and scripts update. - If you want to give RDCO feedback on what the next kit version should include, open an issue. The kit ratchets too.
Estimated total build time
| Phase | Hours |
|---|---|
| Repo scaffold + LICENSE + .gitignore + INSTALL.md skeleton | 1.5h |
| README + 4 docs (architecture, harness-moat, unhobbling, composability) sanitized from concepts | 3.5h |
| SOUL + CLAUDE templates + memory index + memory README | 1.25h |
| Vault scaffold + per-folder READMEs + decisions/log templates | 1.25h |
| 12 sanitized skills (varies wildly per skill — sync-contacts is the long pole at 1h) | 5h |
| audit script generalization | 1.5h |
| Cron template | 0.25h |
| Channel install docs (iMessage + Discord + intro) | 1.75h |
| ONBOARDING.md (the 6-week ratchet) | 1.5h |
| Final sanitization gate (grep pass + spot-check) + push to GitHub | 0.5h |
| TOTAL v1 | ~18h pre-cut |
That's over budget. Cuts below bring it to ~10-11h.
Recommended cuts if time runs short
Order of cut, easiest to hardest:
handout.pdf— defer to v2. The slide deck has the URL; a paper handout is duplicative for a 10-min demo. Saves 1h.docs/unhobbling-moments.md+docs/composability-chains.mdas separate files — collapse intodocs/architecture.mdas sub-sections. Saves 0.5h.sync-contactsskill — 1h sanitization for the longest skill. It also requires Gmail + Calendar MCPs. Defer to v2. Saves 1h. (Update: keep it. It's the strongest "this is what autonomous looks like" demo. Cut something else.)process-newsletterskill — 45min sanitization + depends on a whitelist file the kit doesn't fully ship. Defer to v2 with a note "shipping in v0.2 — needs whitelist tooling". Saves 1.25h including the whitelist file. (Recommend cutting this instead of sync-contacts — process-newsletter has more dependencies.)audit-vault-outputs.pygeneralization — ship as-is with a "rename + edit invariants for your org" header. The 13-invariant PATTERN is the gift; the implementation can stay opinionated. Saves 0.75h.- Per-folder vault READMEs — ship 03-contacts, 04-finance, 06-reference, 09-bet-stacks only (the 4 with structural conventions). Others get
.gitkeep. Saves 0.5h. - Channel install detail — link to MCP server READMEs upstream rather than re-document install steps. Keep the LaunchAgent + tmux pattern doc. Saves 0.75h.
Applying cuts 1, 2, 4, 5, 6, 7: ~5h saved. v1 lands at ~13h. With cut 3 (sync-contacts deferred): 14h-1h = 12h. Inside budget.
Recommended v1 cut set: 1, 2, 4, 5, 6, 7 (keep sync-contacts; it's a strong demo). Lands at ~13h, slightly over budget but achievable across two days.
Aggressive v1 cut set: 1, 2, 4, 5, 6, 7, plus collapse INSTALL.md into README.md and ship audit script verbatim with rename only. Lands at ~10h.
Open questions for founder review
- Repo name —
coo-in-a-box(recommended),ray-starter-kit,harness-starter, or something else? - Visibility — Public GitHub repo (recommended for shareability + SEO + future Ray-as-a-Service signal) or unlisted gist (simpler, no public-facing accountability if v1 is rough)?
- Landing page — Should
raydata.co/coo-in-a-box(or/starter) point at this with a hosted README + GitHub link? Recommended yes for v2; v1 can stay GitHub-only since the demo audience can scan a QR code to the repo directly. process-newsletterin v1 or v2? — Recommend v2. Heavy sanitization, depends on whitelist tooling that's unscoped. The 11 other skills cover the demo arc.- Audit script — generalize or ship-as-is with rename? — Recommend ship-as-is with rename + a short "fork and customize the invariants" header. The pattern is the gift. Generalizing it to the point of being framework-agnostic loses the "concrete worked example" value.
- Deterministic-script ecosystem — Recommend ship ONLY
audit-vault-outputs.py+scheduled-jobs.template.txtin v1. The other 30 scripts (extract-key-frames, vtt-to-text, finance-venv, etc.) are bet-specific. Document them as "RDCO ships these in our setup; here's the pattern, you'll write your own as needs emerge." Saves significant scope. - MEMORY.md template — Ship the index format only (no actual feedback files), or ship 2-3 sample feedback files showing the shape ("feedback_example_voice.md", "feedback_example_decision_pattern.md")? Recommend 2-3 anonymized examples. Pure-empty index is hard to learn from.
- License — MIT recommended (permissive gift). Anything else worth considering? Apache-2.0 if patent concerns; GPL if RDCO wants any modifications to come back upstream (probably not the gift vibe).
Status
- 2026-05-10 09:56 ET: Scope filed (this doc).
- Next: founder review (target: today). Open questions 1-3 are blocking; 4-8 are tunable mid-build.
- Then: Mon AM build kickoff per cut decisions.