From mainbranch
Open, update, close, list, and narrate business bets from a repository of truth. Useful for tracking operating hypotheses, progress, verdicts, and drafting public-safe narration.
How this skill is triggered — by the user, by Claude, or both
Slash command
/mainbranch:mb-betThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Shared source:** The portable workflow contract lives in
Shared source: The portable workflow contract lives in
workflows/mb-bet/workflow.md. This Claude skill is the Claude Code shell over
that source.
Shared contract markers: Keep these aligned with the shared source.
Required commands:
mb status --json --peekmb start --jsonmb doctor repair --planmb validate --cross-refs --jsonmb checkpoint --plan --jsonmb similar-bets "<thesis>" --repo . --jsonmb books exposure --repo . --bet bets/YYYY-MM-DD-slug.md --jsonmb books exposure --repo . --active --jsonRequired fact paths:
money_pathmoney_path.objects.proof.qualityvalidation.file_contractscontent_strategyranked_actionsupdatereadinessdrift.itemsbrain.betsbrain.bets.activebrain.bets.due_soonbrain.bets.overduebrain.bets.exit_criteriarelationship_health.sections.betsrelationship_health.gapscheckpoint.pendingcheckpoint.pending.blockersbooksruntime.codex_cliruntime.claude_codeApproval gates: updates_repairs_migrations, file_writes, checkpoint,
provider_mutation, publishing_or_spend, customer_contact, private_data,
destructive_operations, structured_collection, and
public_issue_or_proposal.
Public/private boundaries: no_secrets, no_raw_provider_exports,
no_raw_transcripts, no_customer_member_data,
no_private_runtime_settings, no_private_dms_or_gated_communities,
no_raw_finance_legal_records, and no_raw_ledger_rows.
Core flow: Bet is a time-boxed wager, not an offer or push. Preserve new,
update, close, list, and narrate modes.
Marker phrase: new, update, close, list, and narrate.
Keep bets/YYYY-MM-DD-slug.md and the strict contract for typed links and
reverse linked_bets; aggregate exposure privacy; public-safe narration;
mb validate --cross-refs; checkpoint plan; and the Codex support boundary of
read-only planning until runtime smoke proves lifecycle writes.
Business bets are hub nodes in bets/. They connect decisions, research,
pushes, logs, documents, and outcomes without replacing any of them. Legacy
campaigns/ records may still be linked for old repos, but new coordinated
work uses pushes/.
A bet is not an offer. An offer is a durable thing the business sells. A bet is
a time-boxed operating hypothesis with appetite, target, deadline, evidence,
and a verdict. A successful bet may graduate into an offer, workflow, content
pillar, push, or decision; a failed bet should be closed with learning.
For the full offer/bet/push/proof routing rubric, use
.claude/reference/business-primitives/offer-bet-push-proof.md.
Use /mb-bet for five modes:
new - open a bet with hypothesis, appetite, MoneyPath anchor, metric, target, deadline, and links.update - add progress and link new evidence.close - record result, verdict, learning, and follow-up links.list - summarize active bets and deadlines.narrate - draft public-safe site, community, or social copy from repo truth.Do not publish automatically. Narration drafts are files or message drafts only.
Work from the business repo. If unsure, confirm that core/, research/,
decisions/, or bets/ exists in the current directory. If not, ask the
operator to start Claude from the business repo or run /mb-start.
CLI facts first: Use mb status --json --peek for active bets and repo
readiness before direct file reads. Use mb validate --cross-refs after
bet/link edits instead of hand-checking relationship health in prose.
Before writing, run:
mb status --json --peek
Use the result to spot active bets and repo readiness. After writing or editing bet files, run:
mb validate --cross-refs
If validation warns about missing bidirectional bet links, repair the linked file frontmatter when it is clearly in scope.
Every bet file lives at bets/YYYY-MM-DD-slug.md and uses this frontmatter:
---
status: open
opened: YYYY-MM-DD
deadline: YYYY-MM-DD
appetite: "2 weeks"
appetite_tier: small
hypothesis: "If we do X for Y, Z will happen because..."
metric: "qualified calls booked"
target: "10 qualified calls by deadline"
result: ""
owner: ""
money_path:
required: true
bet_id: YYYY-MM-DD-slug
exposure_cap:
amount: 500
currency: USD
anchor_required_before: execution
kill_rubric:
failure_signals:
- id: no-qualified-calls
metric: qualified_calls
comparator: <
threshold: 3
by: YYYY-MM-DD
action: kill
double_down_signals:
- id: profitable-signal
metric: cost_per_qualified_call
comparator: <=
threshold: 150
action: double_down
linked_decisions: []
linked_research: []
linked_pushes: []
linked_campaigns: []
linked_outcomes: []
public: false
channels: []
tags: []
---
Allowed statuses: open, paused, closed, canceled.
Allowed appetite_tier values: trivial, small, material, strategic.
Keep appetite human-readable, and use appetite_tier for rough financial
weight. The tier should match the operator's appetite thresholds in
core/finance/books.md when that file exists.
When an owner is known, use the existing team member slug from
core/team/<slug>.md. Ask before creating a new team file, and keep owner
enforcement future-scoped unless the bet schema validates it.
For financially material bets, use money_path.bet_id equal to the filename
stem and tag private hledger transactions with bet:<id>. Check exposure with:
mb books exposure --repo . --bet bets/YYYY-MM-DD-slug.md --json
For active bets:
mb books exposure --repo . --active --json
Treat the exposure output as safe aggregate evidence only. Do not ask for or paste raw ledger rows, payees, account names, account numbers, private vault paths, or transaction memos into bet files.
Use kill_rubric.failure_signals and kill_rubric.double_down_signals for
pre-committed exit and scale criteria. mb status --json evaluates only
declared rubrics against explicit metrics: or metric_values: frontmatter;
it does not infer kill criteria from prose.
Use repo-relative paths in link fields:
linked_decisions: decisions/*.mdlinked_research: research/*.mdlinked_pushes (official): pushes/YYYY-MM-DD-slug/push.md or push artifactslinked_campaigns (legacy compatibility, leave as [] for new bets):
campaigns/*/campaign.md records on existing repos that have not yet
migrated. New bets always include both fields with linked_pushes
populated and linked_campaigns: []. When the operator is on a legacy
campaigns/ repo, recommend mb doctor and mb migrate campaigns --plan
before creating new push work.linked_outcomes: log/*.md, documents/*.md, or outcome artifactsWhen linking an existing file to a bet, add the reverse link too:
linked_bets:
- bets/YYYY-MM-DD-slug.md
After adding or changing typed linked_* frontmatter, add or repair the
body-level ## Related links mirror with Markdown relative links. If the
mirror is missing or stale, run mb doctor repair --plan and ask before
mb doctor repair --apply; use the connection decision matrix in
docs/business-connections.md and do not invent relationships from body links.
Use when the operator says they want to try, launch, test, prove, or make a bet.
core/offers/ folders without an
accepted decision, approved migration plan, or explicit instruction.bets/YYYY-MM-DD-slug.md.
If money_path.required is true, set money_path.bet_id to
YYYY-MM-DD-slug; do not invent private ledger details.linked_bets frontmatter to linked decisions, research,
pushes (or legacy campaigns), and outcome files when those files already
exist and the edit is clearly safe.Body template:
# Bet Title
## Why This Bet
[The operating tension or opportunity.]
## Hypothesis
[Same claim as frontmatter, with context.]
## Work Plan
- [ ] [Concrete action]
## Evidence Log
- YYYY-MM-DD - Bet opened.
## Result
Open.
## Narration Notes
[Public-safe angles, claims to avoid, proof needed before sharing.]
## Related links
- [Existing linked file](../decisions/YYYY-MM-DD-example.md)
Use when work happened but the bet is not finished.
Evidence Log entry.linked_decisions, linked_research, linked_pushes (or legacy
linked_campaigns), or linked_outcomes if new files now matter.result blank unless there is a real result.linked_bets fields on newly linked files.Use when the deadline passed, the target is hit, or the operator decides to stop.
status: closed or status: canceled.result with the measured outcome and verdict.## Learning section or update it if present.linked_bets fields.core/offer.md or core/offers/<slug>/offer.md.Summarize active bets from mb status --json --peek and direct file reads:
Keep it short. End with the next bet that needs attention.
Draft public-safe narration from the bet and linked repo truth. Do not invent results, metrics, claims, testimonials, or publishing channels.
Ask the operator which surface if unclear:
Draft format:
# Narration Draft
Surface: [site/community/social]
Source bet: bets/YYYY-MM-DD-slug.md
## Public Angle
[What can be shared safely.]
## Draft
[Post or page copy.]
## Claims To Verify
- [Any metric, result, or proof that needs source confirmation.]
## Source Links
- [repo-relative paths read]
If the bet has public: false, ask before drafting public copy. Offer a private
internal retrospective instead.
Tell the operator what changed, which files were linked, and whether validation
passed. If bet files or linked repo truth changed, run mb checkpoint --plan --json, show the proposed checkpoint and any blockers, validate the chosen
message with mb checkpoint --validate "..." --json, and save with
mb checkpoint --message "..." --yes only after operator approval.
End with the exact next command:
mb status
npx claudepluginhub noontide-co/mainbranch --plugin mainbranchDetects repository state and user intent to route to appropriate skills or CLI commands for setup, sync, repair, or launch.
Conducts structured weekly retrospectives for solopreneurs: scans git repos, interviews the founder, and records findings into issues and canonical files.
Generates structured weekly stakeholder updates for product initiatives, covering metrics movements, bets in progress, customer quotes, and highlights. Useful for leadership progress reports.