The .roadmap/ config
.roadmap/ is the scope and governance of a listing, living as TOML files
inside its repo. It answers what we’re building and who decides. It’s human-
and agent-editable, but changes go through the vote it
defines.
Layout
.roadmap/
scope.toml # the spec: problem, screens, acceptance criteria
milestones.toml # ordered milestones + status + linked PRs
governance.toml # vote threshold, merge timeline, who votes, amend rules
conditions.toml # conditional-pledge conditions → target PRs
agents.toml # orchestrator config: runners, budget caps (USD + token envelope)
requests/<id>.toml # build requests projected from vibe:build issues (the trigger)
scope.toml
[scope]
problem = "Habit apps nag and guilt-trip; I want calm streaks."
audience = "People who bounced off mainstream habit trackers."
[[screen]]
id = "today"
summary = "Today's habits with one-tap check-off."
[[acceptance]]
id = "a1"
must = "Works fully offline; no notifications enabled by default."
milestones.toml
[[milestone]]
id = "m1"
title = "Core tracking + streaks"
status = "in-progress"
prs = ["PR#12", "PR#19"]
[[milestone]]
id = "m2"
title = "Offline sync"
status = "planned"
governance.toml
[governance]
vote_threshold_pct = 60
merge_timeline_hours = 72
who_votes = "sponsors"
settings_changeable = true # amend via the same vote it defines
conditions.toml
[[condition]]
pledge_id = "pl_8842"
kind = "pr-merged"
target = "PR#42"
description = "Release $500 only when offline-sync (PR #42) merges."
agents.toml
Carries the USD cap (our authority) and a derived token envelope the orchestrator (agentFleet) enforces while staying USD-agnostic:
[agents]
fleet = "vibe-product"
runners = ["claude", "codex-run"]
max_concurrent_agents = 3
max_spend_per_milestone_usd = 600 # our USD cap (authority; informs the envelope)
[agents.budget] # agentFleet enforces these token caps; reports tokens, never prices
max_tokens_per_milestone = 90000000
max_tokens_per_run = 30000000
halt_on_breach = true
halt = false # we flip true to stop (e.g. released balance exhausted)
price_basis = "Claude + Codex"
requests/
Each build request is a TOML file the orchestrator projects
from a vibe:build GitHub issue. The issue is the source of truth; the file is the
working state the orchestrator drives and updates.
version = 1
id = "req-20260606-0001"
source = "github-issue"
listing_slug = "carecircle"
issue_number = 42
milestone_id = "m2"
title = "Add recurring meal reminders"
goal = "Implement recurring reminder digests so helpers know what still needs coverage."
requested_by = "mira"
status = "pr_open" # queued|planning|building|in_review|pr_open|done|failed|cancelled
run_id = "run-offline-sync-20260606"
pr = "PR#42"
[budget]
max_tokens = 90000000
max_concurrent_agents = 3
The rule
Anything in .roadmap/ can change — but only through the governance process.
Open a PR, gather weighted approvals, merge. The companion to .roadmap/ is
.treasury/, which tracks the money.