Connected projects

Many repositories. One product in view.

Share a single project record through a wrapper, or connect independent records through federation. Keep source history in each repository and make the relationships between the work visible.

Luma demo: API connected to Web and Mobile

Choose your layout

One shared record

Use a wrapper when related repositories share one roadmap and one .story/ directory. Keep code commits in each repository and project records in the wrapper. Choose this when the repositories share one planning record.

Connected project records

Use federation when each repository keeps its own stories and handovers. An orchestrator connects the nodes for dependency-aware recommendations. Existing project histories stay in place.

Read the federation walkthrough

Wrapper projects

One roadmap. One shared record.

Put a .story/ directory in a wrapper above your API, Web, and Mobile repositories. When a child has no ledger of its own, Storybloq walks up to the wrapper. Stories and handovers live together; source commits stay in each child repository.

product/
├── .story/       # shared stories, phases, and handovers
├── api/         # separate Git repository
├── web/         # separate Git repository
└── mobile/      # separate Git repository
Set up a wrapper

Create the wrapper, place or clone the child repositories inside it, and initialize Storybloq in the wrapper. Keep child directories out of the wrapper’s Git history.

storybloq init --name Product --type multi-repo --language mixed

If a child already has .story/, it takes precedence over the wrapper. Preserve that history and consider federation before moving or removing records.

Commit code and records

Commit source changes in the child repository, then commit changed .story/ records in the wrapper. Use Git status to find the actual record filenames. Legacy display-ID filenames and canonical filenames can coexist.

git status --porcelain .story/

Keep each implementation scoped to the intended repository. A shared ledger alone does not give the agent a cross-repository execution strategy.

Federation

Separate histories. Connected work.

Keep .story/ in each repository and register those repositories as nodes in an orchestrator project. Each node retains its stories, lessons, and handovers. The orchestrator provides a shared view and recommendations across the product.

product/                 # orchestrator
├── .story/config.json   # registered nodes and relationships
api/.story/              # API history
web/.story/              # Web history
mobile/.story/           # Mobile history

The booking page needs the reservation API.

Record the Web story’s dependency on the API story. An unfinished API story blocks the Web story from being ready. Check the API story’s recorded completion before starting Web. Recommendations help identify blockers and candidate work across the product.

Story dependencies describe which work is ready. Node dependencies describe build order; they are separate relationships.

Connect existing repositories

From the orchestrator directory, initialize a project and register each repository by its actual path. Each node needs its own .story/ for project-state queries.

storybloq init --name Product --type orchestrator
storybloq node add api --path /path/to/api --role "Reservation service"
storybloq node add web --path /path/to/web --role "Booking experience"
storybloq recommend --count 5

This shows product-level priorities such as blocked or stale nodes. Per-repository story recommendations are available through the dispatch preview. Cached state can be stale; check the current node records before starting dependent work.

Make cross-repository writes explicit

Reading connected project state does not enable writes. To let supported orchestrator commands and MCP tools update node records, opt in with federation.allowNodeWrites (default: false).

storybloq config set-federation --allow-node-writes
storybloq ticket update T-002 --node web --cross-node-blocked-by api:T-001

Replace the example IDs with your stories. Run the update from the orchestrator. This records the dependency in Web’s ledger; it does not implement either story or merge source changes.

Read the federation field note for the architecture behind this layout.

Try the pattern on your stack.

Storybloq is free and local-first. The walk-up directory discovery works out of the box.