Technical / extraction: architect · data-architect · data-agent · exa-mastery · system-map · auto-fix | Business / interpretation: quarterback · market-analyst · storyteller · writer · audit-quality · tech-translator.
Each agent re-read a peer's SKILL.md cold before drafting, so blind spots cross-pollinate. Pairing chosen to put each reader on the skill nearest its hardening task.
| Agent | Re-read peer skill | Why this pairing |
|---|---|---|
| architect | data-architect | infra placement vs schema home seam |
| data-architect | data-agent | schema design vs read-only introspection |
| data-agent | exa-mastery | where Exa writes rows it must later inspect |
| exa-mastery | auto-fix | middleware bypass = build error class |
| system-map | architect | map must reflect canonical-home rules |
| auto-fix | system-map | fixes need the connection graph |
| quarterback | audit-quality | sequencing gated by the maker-checker |
| market-analyst | writer | listing taxonomy feeds copy |
| storyteller | market-analyst | narrative must respect the band taxonomy |
| writer | storyteller | copy coherence with trust story |
| audit-quality | quarterback | checker must know the wave order |
| tech-translator | writer | plain-English must match shipped copy |
| Candidate | Pass 1 | Pass 2 task-fit test | Result |
|---|---|---|---|
| migration-reconciler | 3 | Owns auto-fix + data-architect drift tasks; absorbs cost-ledger unification | ADDED #1 |
| reveal-gate (anon→Zoom→reveal) | 2 | Maps to ≥4 tasks; core marketplace invariant | ADDED #2 |
| off-platform-sentinel | 1 | Literal solution to the off-platform-workaround hole; maps to exa-mastery task | ADDED #3 |
| audio-purge-enforcer | 1 | Better as a DB audio_purged_at NOT NULL CHECK than a skill | → constraint |
| anon-gate (doc content) | 1 | Overlaps reveal-gate + existing Blind-First rule | folded |
| cost-ledger unifier | 1 | Folded into migration-reconciler per quarterback | folded |
Opt-outs: none. architect, data-architect, quarterback all OPTED IN — each judged its assigned slice squarely within skill scope. Full 12-agent roster stands.
skills/maxswarm/SKILL.md, then counted __NNN__ files in skills/maxswarm/notebook/ (37) and previous_swarms/ (26) → locked run 032. Ran skills/maxswarm/currency/leaderboard.json for the 11 named agents. Dispatched architect/data-architect/quarterback as live sub-agents; each returned 3 votes + an opt-in. Tallied votes, ran the Pass-2 "is any task perfect for this skill" test against their merged assignment lists, demoted audio-purge to a CHECK constraint. (74 words)Quarterback owns integration; architect owns placement; data-architect owns schema. Rule enforced: one writer / one validator per seam — never both edit. Truth freezes before launch surfaces start.
| Agent | Task | Done-when |
|---|---|---|
| data-agent | Introspect 239 tables; flag ~90 empty for drop; spec the catalog↔metrics join-bridge | inventory/audits/empty-table-triage.json + bridge spec |
| data-architect | Reconcile 140 migration files vs 18 applied; author marketplace schema (listings_anon, identities, engagements, transcripts, ban_list) with reveal/purge invariants as CHECK constraints | migration applies clean; invariants DB-enforced |
| architect | Add vercel.json + .nvmrc + engines (Node 20); branch hygiene plan for 146→active | 3 config files committed; prune list produced |
| exa-mastery | Run /exa-audit; kill bypasses of engine/lib/exa_middleware.py; add off-platform-contact signal to enrichment output | 0 bypasses; offplatform_signal_score on engagements |
| Agent | Task | Blocked by |
|---|---|---|
| system-map | Rebuild repo→service→table map + 3-ledger / 6-schema-migration diagram | data-architect |
| auto-fix | Repair 4 frozen GitHub crons + ~9 uninstalled LaunchAgents; fix com.nextchapter.sales-agent wrong-machine path | architect |
| market-analyst | Define banded-financials enum + listing taxonomy (vertical / EBITDA-band / geo) | data-architect |
| audit-quality | Build audio-purge + anonymization gate-check (record→process→dump) | data-agent, data-architect |
| Agent | Task | Blocked by |
|---|---|---|
| writer | offmarketdealroom.com listing/CIM templates, blind-first; ban/reveal copy keyed to real columns | market-analyst, data-architect |
| storyteller | Narrate the "anonymous-to-meet, off-platform=ban" trust story + anon→revealed lifecycle | writer |
| tech-translator | Plain-English ban/reveal mechanics + data dictionary for the 5 new tables | storyteller |
| quarterback | Run scripts/apply-to-all-gate.sh across all 18 deal slugs before launch | ALL |
inventory/deals/registry.json, engine/lib/exa_middleware.py, launchagents/. (73 words)| Technology | Version | Source of truth |
|---|---|---|
| Next.js | 16.2.3 (exact pin) | package.json L49 — two apps, both pinned |
| React / React-DOM | 19.2.4 (exact) | package.json L53–54 |
| Tailwind CSS | ^4 (+ @tailwindcss/postcss ^4) | package.json L69,61 |
| TypeScript | ^5 | package.json L72 |
| Node.js (runtime) | 25.8.1 | node --version · CI pins Node 20 (mismatch) |
| npm | 11.11.0 | npm --version; single package-lock.json (377 KB) |
| Python | 3.14.3 (brew also 3.12.13) | python3 --version; engine/pyproject.toml requires ≥3.10 |
| PostgreSQL (Supabase) | psql 18.3 client · @supabase/supabase-js ^2.103.3 | psql --version; package.json |
| Supabase CLI | 2.75.0 (latest 2.101.0 — outdated) | supabase --version |
| Claude Code CLI | 2.1.90 | claude --version |
| @anthropic-ai/sdk | ^0.93.0 | package.json |
| Doppler | 3.76.0 | doppler --version — wraps every LaunchAgent |
| Vercel CLI | 50.37.3 | vercel --version; no vercel.json in repo |
| GitHub CLI | 2.89.0 (brew tracks 2.88.1 — PATH drift) | gh --version |
| Tailscale | 1.96.4 (go1.26.1) | tailscale version |
| Homebrew | 5.1.14 | brew --version |
| Zod / Zustand | ^4.3.6 / ^5.0.13 | package.json |
| Vitest | ^4.1.5 (test runner) | package.json devDeps |
| pdf-lib / pdfjs-dist | ^1.17.1 / ^5.7.284 | package.json |
| Slack SDK (web-api / socket) | ^7.15.2 / ^2.0.7 | package.json |
| Google APIs (maps/auth) | @vis.gl/react-google-maps ^1.8.3 · google-auth-library ^10.6.2 | package.json |
| Python libs | psycopg2-binary, requests, jinja2, python-docx, yfinance, pyyaml | engine/requirements.txt (range-pinned ≥) |
| launchd (Mac scheduler) | macOS Darwin 25.5.0 | 17 plists in launchagents/ |
| Ollama / MLX (local LLM) | 0.18.2 / 0.31.1 | brew list --versions |
| ffmpeg / pandoc / poppler / libreoffice | 8.1 / 3.9 / 26.03 / 26.2.3 | brew list (doc/media pipeline) |
Absent that the brief assumed present: no apps/deals Vite app (does not exist — only apps/phoenix-lunch, a 2nd Next.js app); no Vite dependency; no .nvmrc; no engines; no packageManager; no vercel.json; no Docker; no asdf .tool-versions.
package.json line-by-line for pins, then engine/requirements.txt and engine/pyproject.toml for Python. Ran each CLI's --version and brew list --versions for system tools. Checked for apps/deals/package.json — absent; find apps showed only phoenix-lunch. Grepped for .nvmrc, vercel.json, Dockerfile, .tool-versions — all absent. Cross-checked CI node-version in .github/workflows/sync-*.yml → pinned 20, runtime is 25.8.1. (72 words)EXPERT = configurations/data proving deep, idiomatic use. WEAK = unused or mis-used capability, with the cited evidence.
skills/*/SKILL.md), the largest swarm-build at 48,216 chars — a self-built multi-agent OS predating native multi-agent support.skills/maxswarm/currency/leaderboard.json (storyteller leads at 322); cross-read + dissent phases hard-coded into the skill contract.notebook/_template.md).skill-sync.yml writes a Supabase row on every skills/** push; com.nextchapter.skill-sync LaunchAgent polls every 30s so all machines inherit skill edits.feature_metrics logs only 24 dotted-keys — none of the 100 skills' invocations are counted. You cannot answer "how often did /hunter run."@anthropic-ai/sdk ^0.93.0 present but no cache-control config found in scripts — repeated context paid full price.deal_target_sources alone holds 40,232 rows feeding the enrichment pipeline.nc_contacts is a 6,853-row VIEW — derived layer kept separate from base contacts (13,293).dossier_provenance (2,322), company_aliases (2,006), contact_scores (5,582) — enrichment is auditable, not black-box.process_runs, dossier_runs (1,638), enrichment_runs, tam_ring_runs log agent execution.archive_2026_04_22.*, keeping the public schema's working set clean.template_test_runs).supabase_migrations.schema_migrations vs 31 in a parallel public.schema_migrations — three sources of "truth," no reconciliation.cost_log (550), archive…tam_cost_log (11,421 JSON rows), process_runs (554) — no unified spend view.feature_catalog_v2 (61 slugs) and feature_metrics (dotted keys) exact-join = 0 rows.2026_05_28_g__* exists while latest commit is 2026-05-26 — naming/ordering not gated.page.tsx routes; 104,691 lines of TS/TSX under src/.src/app/layout.tsx <NavLinks> (most-churned source file, 34 commits).prebuild runs anonymize + ui-registry inject + page-dna check; postbuild does git checkout -- src/./deals/<slug>/ first, shortcuts (/hugo) cloned after.public/**.html) — must inline-copy the header, drift-prone.vercel.json — build/runtime/region settings undeclared; deploy config lives only in the dashboard.phoenix-lunch) with no shared workspace; phoenix-lunch has no lockfile.git checkout -- src/ silently discards generated source — surprising and easy to lose work against.src, apps, engine, skills, public).dash-check (em-dash gate), swarm-publish, skill-sync, 4 sync jobs.swarm-publish.yml auto-regenerates public/swarm/** on notebook push, commits [skip ci].git-guardrail skill protect destructive ops.INDEX.md 86, triage-state.jsonl 76) committed into git.doppler run --project clawdbot --config dev/prd..env files; 30+ secrets injected at runtime.vercel.json; Doppler→Vercel integration assumed but not in-repo.engine/lib/exa_middleware.py; exa-mastery + exa-audit enforce idiomatic use.exa.search 915 runs; full audit trail (exa.search…audit 380).idle as running; 5–15 min windows).feature_metrics exa events (1,924) overlap ledgers — double-count risk.call_log, 2,273 AI-scored in call_analysis.fireflies_to_deal_files, gmail_to_deal_files, salesfinity_to_deal_files (hourly/daily, Doppler-wrapped)./Users/ewinggillaspy/Github/…, not Doppler-wrapped).package.json, brew list) to behavioral evidence: Supabase claims came from pg_stat_user_tables row counts and information_schema; Exa/feature claims from feature_metrics GROUP BY feature_key and process_runs GROUP BY provider; route/page counts from git ls-files 'src/app/**/page.tsx' (133) and 'public/*.html' (871); LaunchAgent drift from diffing launchagents/*.plist against ~/Library/LaunchAgents. Expert vs weak split on presence/absence of config + telemetry. (75 words)Other LLM/API calls (cost_log): OpenAI 401 · Mistral 111 · Groq 15 · DeepSeek 14. Historical TAM ledger (archive): gemini_flash 6,867 · web_scrape 2,009 · google_maps 1,161 · exa 840 · az_roc 544. Note: brief examples (482 commits / 72 tables / 288 columns / 88K records) are all materially exceeded by the real figures above.
call_log)Deal stages: worth_chasing 29 · closed_lost 14 · hunt_launched 2 · proposal_sent 2 · discovery 1 · pre_engagement 1. Engaged set (registry): HR.com (sell), Capstone (buy/proposal), Design Precast (buy/hunt), Loan Mart (sell). 18 active slugs across tiers, 7 blind codenames.
communications)Gap flagged honestly: a discrete "letters sent / replies / negatives" store was not located in this pass — communications.direction is the closest proxy. No design standard table exists. (Per Show-The-Work rule: stated as absent, not fabricated.)
git rev-list --count HEAD; branches via git branch -a; tables/columns/rows via information_schema + pg_stat_user_tables SUM through doppler run … psql "$SUPABASE_POSTGRES_CONN". API counts GROUP BY api_name across cost_log, archive_2026_04_22.tam_cost_log, process_runs. CRO from call_log/call_analysis/deals counts + GROUP BY stage. CMO from communications GROUP BY direction; no letters table surfaced. Skills/journals counted with ls + git ls-files. (74 words)| # | Process (feature_metrics.feature_key) | Runs |
|---|---|---|
| 1 | exa.search | 915 |
| 2 | exa.search.linkedin_discover_pass2.audit | 380 |
| 3 | exa.search.linkedin_discover_pass2 | 251 |
| 4 | exa.websets.url_import_enrich | 152 |
| 5 | exa.recipes | 88 |
| 6 | page-dna.view | 61 |
| 7 | exa.cache_hit | 55 |
| 8 | exa.websets.url_import_enrich.pass2 | 27 |
| 9 | email.editor | 22 |
| 10 | build.report-status | 20 |
Plus process_runs by agent: conductor:stage-d 500 · stage-c 27 · stage-d-repoll 26. 9 of the top 10 feature events are Exa — the platform's center of gravity is enrichment.
| # | Skill | Chars | DB telemetry |
|---|---|---|---|
| 1 | swarm-build | 48,216 | none |
| 2 | skill-creator | 34,218 | none |
| 3 | score-bot | 31,334 | none |
| 4 | thread-mine | 28,085 | none |
| 5 | salesfinity-loader | 26,489 | none |
| 6 | ui-touchup | 25,747 | none |
| 7 | maxswarm | 24,953 | none |
| 8 | exa-mastery | 24,126 | none |
| 9 | close2 | 23,336 | none |
| 10 | pre-flight | 21,673 | none |
The finding behind the number: no skill writes an invocation row to Supabase, so "biggest thing that may never run" is unprovable from data — these 10 are the largest written artifacts with zero DB trace. Instrumenting skill calls is the unlock.
Feature def (src/lib/features/defs/) | Commits | First commit | Commits/day* |
|---|---|---|---|
| deals.ts | 11 | 2026-05-06 | 0.52 |
| exa.ts | 10 | 2026-05-08 | 0.53 |
| misc.ts | 9 | 2026-05-06 | 0.43 |
| meetings.ts | 9 | 2026-05-06 | 0.43 |
| admin.ts | 9 | 2026-05-06 | 0.43 |
| email.ts | 8 | 2026-05-06 | 0.38 |
| review.ts | 4 | 2026-05-06 | 0.19 |
| letters.ts | 4 | 2026-05-06 | 0.19 |
| campaigns.ts | 4 | 2026-05-06 | 0.19 |
| call-library.ts | 3 | 2026-05-08 | 0.16 |
*Ratio = commits ÷ (2026-05-27 − first-commit). High ratio = you re-touch it often = it's load-bearing & unsettled. deals.ts and exa.ts are the two you change most relative to their age — the live nerves of the system. (Method note: brief's --follow corrupted rename history; recomputed without it.)
SELECT feature_key, count(*) FROM feature_metrics GROUP BY 1 ORDER BY 2 DESC. Largest-untouched: looped wc -c over skills/*/SKILL.md, sorted desc, then cross-checked each top name against the 24 distinct feature_metrics keys — zero matched, confirming no telemetry. Velocity: for each src/lib/features/defs/*.ts ran git log --oneline -- <file> | wc -l and git log --reverse --format=%ad for first date, divided by days to 2026-05-27. (73 words)skill_sync_events → LaunchAgent git-pull (every 30s). Skill edits replicate fleet-wide without manual sync. (skill-sync.yml + com.nextchapter.skill-sync)swarm-publish.yml → post_run_sync.sh → Vercel deploy. Every swarm run auto-renders to swarm.chapter.guide within ~60s, commits [skip ci]..env files. Invisible and reliable.engine.ingestion.* → deal_files (4,263) + call_log (5,155). Hourly conversation intelligence lands structured, Sample-vs-Expand-gated.process_runs + feature_metrics + contact_scores (5,582). Enrichment writes provenance every call; 9 of top-10 processes ride this rail.feature_catalog_v2 and feature_metrics share no key — feature usage can't inform the roadmap.vercel.json — deploy settings can't be reviewed, diffed, or rolled back in git.swarm/* to main.INDEX.md 86 commits) — git tracks machine output.public/**.html pages parallel to 133 framework routes./deals/hr-com/meetings (268 LOC) pre-rebuild. Recurs every build cycle.migration-drift LaunchAgent exists but no reconciler — drift returns each sprint./hugo, loanmart cim) get caught and re-done per deal; the 10-item checklist is re-run by hand each time..github/workflows/*.yml, launchagents/*.plist ProgramArguments, and engine/ingestion/* module names cross-referenced to their destination tables (row counts from pg_stat_user_tables). Sprawl quantified from the empty-table count, git branch -a, and top-churn git log --name-only | sort | uniq -c. Rework patterns mined from maxswarm's embedded known-issues block in skills/maxswarm/SKILL.md and the recurring AGENTS.md BLOCKING rules (each rule encodes a repeated failure). (75 words).env, one vault, every runtime wrapped. Never regress this for convenience.| Topic | Fix | Evidence |
|---|---|---|
| Depth | Instrument skill calls — one Supabase row per skill invocation. Turns 100 blind skills into a usage-ranked roadmap. | 0 skill rows in feature_metrics |
| Clarity | Lock one naming convention (migrations, cost, identities). Wire git config user.name once per machine. | 2 migration schemes, 3 cost tables, 5 author names |
| Use of features | Build the catalog↔metrics key bridge so "what ran / never ran" is one JOIN; retire dead catalog rows. | 61 catalog vs 24 metric keys, 0 join |
| Model selection | Make the "sonnet default, opus for architecture" rule a hook, not a guideline. | global CLAUDE.md states it, nothing enforces |
| Entry points | Pin runtime: add .nvmrc + engines (Node 20) so terminal/Mac-mini/CI agree. | Node 25.8.1 local vs CI 20; no .nvmrc |
Migration behavior read: 140 files / 18 applied / 31 in a 2nd tracker — the lesson (reconcile drift) has NOT been internalized by behavior; a reconciler is still missing despite a drift LaunchAgent existing. Entry-point read: the wrong-machine LaunchAgent path proves multi-machine setup outran its config discipline.
.nvmrc = 20 + "engines": {"node": ">=20 <21"} in root package.json. Kills local/CI runtime drift.vercel.json with {"framework":"nextjs"} + Node 20 + region. Deploy config enters git.com.nextchapter.sales-agent.plist: repoint /Users/ewinggillaspy/Github/… → /Users/clawdbot/repos/next-chapter-os and wrap in doppler run.v_unified_cost_ledger = UNION of cost_log + tam_cost_log + process_runs (normalized service/cost/ts). One number for cost-watchdog.git branch -r --merged main → delete-safe set for approval. Cut 146 toward an active core.listings_anon keyed to blind-codenames.json with $25M+ banded financials — the Blind-First rule becomes the product, not a checklist.reveal-gate as a state machine. identities table with anon_id ≠ revealed_id and revealed_at null until a platform-mediated Zoom is booked. Identity is earned, not given.off-platform-sentinel. Scan transcripts/messages for email/phone/"let's take this offline" → permanent ban. The design itself keeps shysters out; the monitor makes the workaround impossible. This is the trust moat.transcripts.audio_purged_at NOT NULL CHECK — record → process → dump audio. No voice/video storage: lower cost, lower risk, more side-hustler-friendly. Both parties keep back-office deal-room notes.ui-touchup aesthetic) so buying/selling a company feels sleek, insightful, and safe — the experience is the differentiator off-market.dossier_provenance 2,322), zero .env, AGENTS.md rules. Simplest fixes mapped each named topic to a concrete artifact gap (no .nvmrc, 0 skill telemetry, 3 ledgers, catalog↔metrics 0-join) found in extraction. Day-1 = config-only, no habit change. Day-forever = the 3 voted skills (reveal-gate, off-platform-sentinel, migration-reconciler) plus the marketplace schema data-architect specced for offmarketdealroom.com. (75 words)Verdict: PASS-WITH-NOTES. Every number in the data sections is traceable to a cited command or SQL. Honest gaps flagged, not fabricated: (1) no discrete letters table — CMO uses communications proxy; (2) skill-call counts unprovable — no telemetry rows (itself a finding); (3) Exa call count differs by ledger (842 hard / 1,924 feature-event) — both reported with the discrepancy named; (4) brief's example figures superseded by larger real values.
Telemetry gate: this run is an audit (no new runtime system shipped) → exempt. The 3 voted skills will carry telemetry by design (each writes a row). Highlight for Ewing: the single most expensive structural gap is zero skill-invocation telemetry — you operate 100 skills blind to which ones earn their keep.