← Notes

Case study: business coaching crew in about 7 minutes

Wall-clock timings for a business-coaching crew in CrewDefine → Zero, plus why a specialized crew differs from a generic chat model for repeatable advisory work.

Wall-clock measurements from a single local session (20 Aug 2026): author a crew in CrewDefine, load it into Zero, ask a coaching question, then time follow-ups on the same thread.

Scope: founder / operator business coaching (seed–Series B B2B SaaS and services). Environment: CrewDefine CLI + Zero via Docker Compose on localhost. With Zero already running, authoring through first useful answer was about 7 minutes. Install and image pull are out of scope; see Getting started for that path.

The timings matter because they are cheap enough to treat the crew as a product artifact — not a one-off prompt. What you get after those minutes is a reusable division of labor, domain tools, and a UI that operators can share. That is the Lab Z bet relative to “open a generic model and ask carefully.” Broader market framing: Where Lab Z fits.


Why a crew instead of a generic model

A frontier chat model can improvise a coaching answer. It will not, by default:

  • Keep the same specialist roles across sessions
  • Force financial claims through a calculator or benchmark table before narrative
  • Separate diagnosis, market research, and planning so each step is inspectable
  • Expose answer verbosity as a product control (summary / light / extended) rather than another prompt rewrite
  • Leave a trace of which agent and tool produced which claim

Those are the consistency mechanisms. They do not replace judgment or a formal eval harness, but they change the failure mode: instead of an eloquent monologue that silently skipped unit economics, you get a roster that is supposed to run diagnostics, call runway_and_scenarios / industry_kpi_benchmark, cite sources, and only then synthesize. When something is wrong, the execution graph shows where.

Fine-tuning here is mostly procedural and contractual — YAML personas, tool wiring, output composition — not a custom base model. You still call Claude / Gemini / OpenAI underneath. The specialization sits in the crew package you own in git and can load into Zero without rebuilding the app.


Who this is for

The same crew serves different jobs depending on who is in the seat:

PersonaWhat they get
Founder / operatorA structured coaching pass (risks, KPIs, 90-day focus) without assembling a consulting stack
In-house strategy / finance partnerRepeatable runs with shared org context; answer modes for exec vs deep dive
Product / eng shipping an advisory surfaceA loadable roster + plugins instead of hard-coding prompts in the UI
Coach / practice leadA draft agenda grounded in tools and citations; human remains accountable for advice
Evaluator / teacherVisible agent/tool traces for critique — not an opaque paragraph

Lab Z’s wider set of offerings supports those personas beyond this one crew: CrewDefine for authoring and validation, Zero for multi-user runtime and traces, DataMaker for synthetic tables when demos must stay honest, pgLens for inspecting Postgres/SQLite before agents reason over extracts. See the apps catalog and Bring your data.


Timings

StepWall clockNotes
CrewDefine interview + persona draft + emit~4.0 min (242s)Rich --seed brief; only 2 confirmation questions
Load crew into Zero + backend restart~5 sAgents + 3 plugin tools registered
First coaching question (summary mode)~2.6 min (159s)Full multi-agent run; Gemini→OpenAI fallback under rate limits
Follow-up: runway + KPI stress-test (light)~27 sOpenAI provider; used runway_and_scenarios + industry_kpi_benchmark
Follow-up: competitor foil (light)~85 sUsed competitor_snapshot + research tools

Authoring → first useful answer: ~7 minutes with Zero already up (4 min define + 5 s load + 2.6 min answer).

Follow-ups are the more interesting operational number for day-to-day use: once the crew is loaded, a light runway/KPI pass returned in under half a minute on OpenAI; a competitor foil with research tools took a bit over a minute. That is the cadence of “ask again with the same roster,” not “rebuild the prompt.”


What we built

Crew: business-coaching-crew (display name Business Coach)

AgentJobNotable tools
directorOrchestrate, sufficiency checksvalidate_information_sufficiency, generate_followup_questions
diagnosticianInternal SWOT / docsswot, knowledge_base, document
market_researcherMarket + competitorsweb_search, news_search, scrape_website, competitor_snapshot, citations
financial_analystUnit economicscalculator, industry_kpi_benchmark, runway_and_scenarios
action_planner90-day plangenerate_recommendations, generate_followup_questions
synthesizerFinal reportvisualizer, extract_citations

Custom tools (implemented for this run):

  1. industry_kpi_benchmark — heuristic CAC / LTV / churn / margin / burn-multiple ranges by industry + stage
  2. runway_and_scenarios — cash + burn → base / optimistic / pessimistic runway tables
  3. competitor_snapshot — structured profile skeleton (optional URL fetch) for coaching comparisons

These are deliberately small and deterministic where possible (especially runway math and KPI tables). The point is not that they replace a FP&A model; it is that the financial specialist has a fixed interface to call instead of inventing numbers in prose. Answer modes: Summary · Light Coaching · Full Coaching Report. Output composition requires citations and allows charts/tables.


Step 1 — Author with CrewDefine (~4 min)

Interview model: claude-sonnet-4-6. Seed included roster, built-in tool assignments, and the three custom tools. With that detail in the seed, the interviewer mostly confirmed and drafted rather than re-deriving requirements. Most of the ~4 minutes was persona drafting, not Q&A.

Emit layout:

crews/business-coaching-crew/
  crew.yaml
  agents/{director,diagnostician,market_researcher,
          financial_analyst,action_planner,synthesizer}.yaml
  tools/{industry_kpi_benchmark,runway_and_scenarios,competitor_snapshot}.py

crewdefine validate passed (custom tools warn as non-built-in — expected). Validation is part of the consistency story: unknown agent IDs, missing director / synthesizer, and broken tool references fail before load.


Step 2 — Load into Zero (~5 s)

With Zero already running (docker compose on localhost:3000 / :3001):

  1. Copy agents + tools + crew.yaml into backend/crews/active/
  2. Set AGENT_CONFIG_DIR / AGENT_PLUGINS_DIR
  3. Restart backend

GET /api/crew returned Business Coach with the three answer modes. GET /api/tools listed the three custom plugins beside the built-ins. From an operator’s perspective the product switched roster without a redeploy of the frontend.

Authenticated Zero home showing Business Coach


Step 3 — First question (~2.6 min)

Prompt (seed-stage SaaS founder vignette): ARR ~$180k, burn $45k, cash $320k, churn ~3.5%, CAC ~$2,800, weak wins vs Tableau-like tools — ask for top risks, KPI vs typical seed SaaS, and the single highest-leverage 90-day move. Mode: summary.

Observed in UI: 6 agents · 23 tools on the live execution graph; response wall-clock ~2:35 in the chrome, ~159s measured end-to-end on the SSE stream (includes Gemini 429 retries then OpenAI fallback).

Live execution graph for the first coaching question

Summary answer with citations and follow-ups

The answer called out ~7.1 months runway, CAC near the high end of seed benchmarks, generic-BI positioning risk vs Tableau/Power BI, and a focus move: stop broad feature-parity acquisition, run tight customer interviews + a measurable retention pilot. Whether you agree with that advice is a separate question; what the run demonstrates is that the path to the answer exercised the intended specialists and tools rather than a single undifferentiated completion.


Step 4 — Follow-up latency

Two more questions on the same thread:

QuestionModeTimeResult
Runway scenarios + KPI comparelight27sUsed financial custom tools
Looker as positioning foillight85sCompetitor snapshot + research

First attempts under Gemini failed with a thought_signature tool-call error (400 INVALID_ARGUMENT). The same prompts succeeded with LLM_PROVIDER=openai / LLM_MODEL=gpt-4o. Timings should always name the provider; multi-agent tool loops are not provider-invariant yet.

Compared with starting a fresh generic chat for each follow-up, the thread keeps organization context and the same loaded crew. The second and third questions are not “new products”; they are additional passes over an owned roster.


What consistency does and does not buy

Does:

  • Make expected work explicit (who runs, which tools exist, what output shape is requested)
  • Make runs comparable across users and days
  • Make failures localizable via traces
  • Let you version and review the crew like application code

Does not:

  • Guarantee better advice than a strong human coach or a carefully prompted specialist
  • Remove provider quirks (see Gemini tool error above)
  • Substitute for evals on your domain corpus

If you need a one-shot answer and never reuse the division of labor, a generic model is simpler. If you need the same coaching system available to founders, partners, and internal tools with inspectable behavior, the crew is the unit that holds that promise. Relative positioning against chat products and frameworks is spelled out in Where Lab Z fits.


Limits

  • Does not include cold install (clone, image pull, keys) — see Getting started.
  • Measures latency and workflow; not a scored coaching-quality study.
  • Sparse CrewDefine seeds take longer than this dense-seed run.
  • Custom KPI tables are coaching heuristics, not audited market data.

Reproduce

# Zero — Business Coach is bundled
cp .env.example .env
./scripts/demo.sh business-coaching-crew
# http://localhost:3000 — crew badge: Business Coach

# Or from a sibling CrewDefine checkout:
./scripts/load-crew.sh --restart ../CrewDefine/crews/business-coaching-crew

Timing scripts used for this note: CrewDefine/scripts/case_study_*.py. Formal protocol: WP-02.


Lab Z Field Note · August 2026 · local Docker · Claude (authoring), Gemini/OpenAI (runtime)