Context
Haiku currently models intents as single-repo. An intent lives in one git repo, with one branch, one set of stages. State lives in .haiku/intents/{slug}/.
Real-world feature work often spans repos: frontend + backend, firmware + control plane, multiple microservices. There's no native way to model "this one intent crosses repo A and repo B."
Status
Tracked as future work. Quote from @jwaldrip:
"haiku has plans for multi portfolio stances that are designed to work across a number of systems, but nothing is implemented today. haiku tries not to stay opinionated about the underlying storage engine."
So the shape is intentionally not pinned to git/Linear/etc — it should work across N storage backends.
Reference implementation — Forge workspaces / umbrella mode
Forge implements multi-repo intents via "workspaces":
Bun-style umbrella. One .forge/domain.yml declares N child repos:
workspaces:
- ./service-a
- ./service-b
Each workspace is independent (own .git, own .forge/). 1 intent = 1 branch name across N repos. ensureBranch(workspaceAbs, intentSlug) creates idempotent branches in each workspace touched. Temper opens 1 PR per workspace; intent only closes when all PRs are OPEN or MERGED.
Sources:
What haiku might want
- Declare "this intent spans these N storage backends / repos / services" without coupling to a specific underlying system
- Branch invariant: 1 intent = 1 branch name (per repo if git-backed)
- Cross-repo gate aggregation: intent doesn't complete until all per-repo gates pass
- Cross-repo state aggregation (read-only or owning, given haiku's storage-agnostic stance)
- Review UI surfaces multi-repo work coherently
Open questions
- Forge's "one umbrella declares N children" pattern, or intent-declared repo list, or something else?
- Interaction with discrete vs continuous mode branches?
- How does the review/browse UI render N parallel repos?
- Storage backends beyond git — Linear, Jira, internal portfolio systems?
cc @juscyllan — forge has a working implementation; would love your input on what worked vs what was painful, and potentially direct contribution.
Context
Haiku currently models intents as single-repo. An intent lives in one git repo, with one branch, one set of stages. State lives in
.haiku/intents/{slug}/.Real-world feature work often spans repos: frontend + backend, firmware + control plane, multiple microservices. There's no native way to model "this one intent crosses repo A and repo B."
Status
Tracked as future work. Quote from @jwaldrip:
So the shape is intentionally not pinned to git/Linear/etc — it should work across N storage backends.
Reference implementation — Forge workspaces / umbrella mode
Forge implements multi-repo intents via "workspaces":
Sources:
.forge/wiki/concepts/workspaces-umbrella.md.forge/wiki/concepts/cross-cwd-dispatch.mdWhat haiku might want
Open questions
cc @juscyllan — forge has a working implementation; would love your input on what worked vs what was painful, and potentially direct contribution.