Skip to content

Propose a mono-repository#811

Open
zastrowm wants to merge 1 commit intostrands-agents:mainfrom
zastrowm:mono_repo
Open

Propose a mono-repository#811
zastrowm wants to merge 1 commit intostrands-agents:mainfrom
zastrowm:mono_repo

Conversation

@zastrowm
Copy link
Copy Markdown
Member

@zastrowm zastrowm commented May 5, 2026

Description

Related Issues

Type of Change

  • New content
  • Content update/revision
  • Structure/organization improvement
  • Typo/formatting fix
  • Bug fix
  • Other (please describe):

Checklist

  • I have read the CONTRIBUTING document
  • My changes follow the project's documentation style
  • I have tested the documentation locally using npm run dev
  • Links in the documentation are valid and working

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.


- **Context switching**: devs and agents lose context every time they jump between repos. Setting up a new worktree means cloning N repositories and making sure they're all on the right branches — that's friction that scales with the number of repos involved.
- **Fragmented PRs**: one logical change becomes multiple PRs that have to be reviewed and merged in the right order.
- **Docs lag behind code**: docs live in a separate repo, so they end up being a follow-up step rather than part of the feature branch. We also can't always finish doc work until the code merges (or do complex branch pointing).
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: even with docs in monorepo, i'd do my docs later :p

I don't want to keep rewriting and re-reviewing docs text while my feature is being reviewed

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

or have an agent auto open a new pr for docs prs :) ideally we never have to write new docs prs

- **Fragmented PRs**: one logical change becomes multiple PRs that have to be reviewed and merged in the right order.
- **Docs lag behind code**: docs live in a separate repo, so they end up being a follow-up step rather than part of the feature branch. We also can't always finish doc work until the code merges (or do complex branch pointing).
- **Duplicated CI/tooling**: shared workflows and configs get duplicated or need a separate `devtools` repo to coordinate.
- **Agent productivity**: agentic tools work best with the full project context in one checkout. Splitting the SDK across repos means the agent doesn't have the full picture out of the gate.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: just pull the repos in the agent workspace


The candidates for consolidation are the repos tightly coupled to the SDK, the ones where we're doing a lot of overlapping work:
- `sdk-python`, `sdk-typescript`, `docs`: these are the core. Cross-repo work here is constant.
- `samples`, `mcp-server`, parts of `devtools`: probably move these too. They're closely tied to SDK development.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm okay with devtools, not sure about samples and mcp server. How do we set up permissions? I don't want to be the bottleneck for these components

- **Fragmented PRs**: one logical change becomes multiple PRs that have to be reviewed and merged in the right order.
- **Docs lag behind code**: docs live in a separate repo, so they end up being a follow-up step rather than part of the feature branch. We also can't always finish doc work until the code merges (or do complex branch pointing).
- **Duplicated CI/tooling**: shared workflows and configs get duplicated or need a separate `devtools` repo to coordinate.
- **Agent productivity**: agentic tools work best with the full project context in one checkout. Splitting the SDK across repos means the agent doesn't have the full picture out of the gate.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Someone worked on a cool project internally called MetaRepo. Can possibly be helpful for this agent problem


### What becomes harder

**Overlap and confusion** is the main concern. No major SDK project puts multiple language implementations in a single cross-language monorepo (see [Appendix A](#appendix-a-how-do-other-sdk-projects-handle-this)), so there's inherent unfamiliarity here.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no other sdk uses wasm to serve multiple languages tho


**Overlap and confusion** is the main concern. No major SDK project puts multiple language implementations in a single cross-language monorepo (see [Appendix A](#appendix-a-how-do-other-sdk-projects-handle-this)), so there's inherent unfamiliarity here.

Additional friction:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

permissions and reviews for non-sdk repos/projects

- `samples`, `mcp-server`, parts of `devtools`: probably move these too. They're closely tied to SDK development.

The repos that stay independent are the ones where there isn't a lot of overlap with day-to-day SDK work:
- `evals`, `agent-builder`, `agent-sop`, `tools`: these are more standalone projects.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

evals sticks out as one which might be considered for the monorepo. For visibility, for docs, for future workflows using evals, etc


The cons are real but manageable — CI complexity is solvable with path-based triggers, GitHub UX limitations can be mitigated with labels and naming conventions, and the migration is a one-time cost. The speed gains from co-location are ongoing: every feature, every port, every doc update benefits from having everything in one checkout. For a single team shipping across multiple languages with heavy agentic development, that daily velocity improvement outweighs the friction.

Additionally, **WASM is already pushing us here**. The TypeScript SDK has started moving towards a monorepo structure on its own because the WASM work requires co-locating TypeScript and Python code. `sdk-typescript` already has folders for the projected Python API from TS (`strands-ts`). Continue this pattern and go all in on a mono repository.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

because of this, I'd focus more on how, rather than why. wasm with multiple repos would be terrible experience to develop/maintain

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the question still stands for other repositories, however - which is what I'd focus on for now.

I want to evaluate the downsides/repercussions than just focusing on WASM

### What becomes easier

- **Agentic development**: agents don't need multi-repo setups or special configuration to have full context. Porting code from Python to TypeScript (or vice versa) is much easier when the agent has both implementations open. Generating docs is more useful when the agent has the source code right there.
- **Unified PRs**: documentation lives in the feature branch alongside the code. Doc development can be done in tandem with implementation rather than being a separate step.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The doc is highlighting docs, but the WASM/wit work and future languages seems like one of the biggest sells to me

- **Unified PRs**: documentation lives in the feature branch alongside the code. Doc development can be done in tandem with implementation rather than being a separate step.
- **Centralized information**: one place for skills, agents, patterns, etc.

### What becomes harder
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may be more challenging/confusing for external contributors. tbd


The cons are real but manageable — CI complexity is solvable with path-based triggers, GitHub UX limitations can be mitigated with labels and naming conventions, and the migration is a one-time cost. The speed gains from co-location are ongoing: every feature, every port, every doc update benefits from having everything in one checkout. For a single team shipping across multiple languages with heavy agentic development, that daily velocity improvement outweighs the friction.

Additionally, **WASM is already pushing us here**. The TypeScript SDK has started moving towards a monorepo structure on its own because the WASM work requires co-locating TypeScript and Python code. `sdk-typescript` already has folders for the projected Python API from TS (`strands-ts`). Continue this pattern and go all in on a mono repository.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WASM's current goal is to increase development velocity by decreasing the burden of maintaining separate repositories. What happens when we introduce new languages. Do we continue to follow this monorepo model and have the strands-java, strands-go, etc. as well?

- **Fragmented PRs**: one logical change becomes multiple PRs that have to be reviewed and merged in the right order.
- **Docs lag behind code**: docs live in a separate repo, so they end up being a follow-up step rather than part of the feature branch. We also can't always finish doc work until the code merges (or do complex branch pointing).
- **Duplicated CI/tooling**: shared workflows and configs get duplicated or need a separate `devtools` repo to coordinate.
- **Agent productivity**: agentic tools work best with the full project context in one checkout. Splitting the SDK across repos means the agent doesn't have the full picture out of the gate.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it actually true? Given the prompt the agent could scan through the parent repo / org, then it might perform better?


### What do other SDK projects do?

No major SDK project puts multiple language implementations in a single cross-language monorepo. The industry standard is monorepo-per-language (Azure, Google Cloud, LangChain) or fully separate repos per language. See [Appendix A](#appendix-a-how-do-other-sdk-projects-handle-this) for the full survey.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would make the argument we still are one language. TypeScript is the feature language and anything else is a build artifact.

- `samples`, `mcp-server`, parts of `devtools`: probably move these too. They're closely tied to SDK development.

The repos that stay independent are the ones where there isn't a lot of overlap with day-to-day SDK work:
- `evals`, `agent-builder`, `agent-sop`, `tools`: these are more standalone projects.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd lean into independent as of now. If we decide to make strands-evals is only for strands then I'd be fine having it into strands mono-repo. Is the effort/cost high if we move the repo afterwards?


### Recommendation

The cons are real but manageable — CI complexity is solvable with path-based triggers, GitHub UX limitations can be mitigated with labels and naming conventions, and the migration is a one-time cost. The speed gains from co-location are ongoing: every feature, every port, every doc update benefits from having everything in one checkout. For a single team shipping across multiple languages with heavy agentic development, that daily velocity improvement outweighs the friction.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are aiming for feature parity across languages (TS and Python). However, I am not sure that we will ALWAYS have feature parity. I see use-cases where certain features are only present/developed in a single sdk language (whether thats due to language constraint or somthing else). A monorepo with feature divergence makes it difficult to justify to customers why that is

Additional friction:

- **File discovery noise**: searching for a single construct returns many results. Even navigating to a file will surface many of the same files across SDK implementations. This is probably the biggest day-to-day annoyance.
- **CI complexity**: multiple different things being built and tested in one repo. Pipelines require more custom code/configs to handle per-project builds, and this usually requires different tooling which can be more complex to set up and maintain.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what tooling do we have for this? can we mitigate it? we should be able to right? we won't be the first monorepo on github

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

Documentation Preview Ready

Your documentation preview has been successfully deployed!

Preview URL: https://d3ehv1nix5p99z.cloudfront.net/pr-cms-811/docs/user-guide/quickstart/overview/

Updated at: 2026-05-05T17:14:02.316Z

- A [2026 analysis](https://tianpan.co/blog/2026-04-17-coding-agents-monorepo-context-window) of coding agents in monorepos found that the core failure mode is agents calling interfaces that were renamed in other parts of the codebase they can't see. Cross-repo splits make this worse because the agent literally cannot access the other repo's current state.
- Research on agent-assisted PRs ([arxiv](https://arxiv.org/abs/2509.14745)) shows 83.8% of agent-assisted PRs are accepted, with 54.9% merged without modification — but this works best when the agent has full context of the change surface.

**The counterargument:** Large monorepos can *hurt* agents too. Context windows have limits (100K–2M tokens), and a 50-service monorepo can exceed what an agent can effectively attend to. The "lost in the middle" problem means agents treat content near the middle of long contexts less reliably than content at the edges. For Strands specifically, the combined SDK + docs + samples is likely well within manageable context size, but it's worth monitoring.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can be solved by well-constructed steering files, which can be cross-repo with a monorepo


### The Agentic Development Argument

This is where the standard industry wisdom may not apply to us. The strongest argument for consolidation isn't about CI or versioning — it's about agent context.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we think this is the strongest argument? Staging a monorepo in a workspace is pretty easy as is. I think the other arguments (single code change many projects) are more convincing to me

- **Migration effort**: real work to get it all working. Changes the ground underneath existing PRs. Issues need to be bulk migrated. Versioning/history gets noisier since git log fills up with commits on unrelated trees.
- **GitHub is built around repos, not projects**: a monorepo flattens several repo-level abstractions that don't have good sub-repo equivalents.
- *Releases*: tags and GitHub Releases share one timeline, even when sub-projects release independently.
- *Issues*: users filing a Python SDK bug land in the same tracker as TypeScript and docs issues — no implicit scoping.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given the feature parity, we'll have to check whether the bug exists in both repos, which waste a bit of effort.

@@ -0,0 +1,302 @@
# Consolidate Strands SDK Repos into a Mono Repository
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did we solve the "which repo turns into the monorepo in this doc"


### Which Repos Move

The candidates for consolidation are the repos tightly coupled to the SDK, the ones where we're doing a lot of overlapping work:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue: The "Which Repos Move" section uses vague language ("probably move these too", "parts of devtools") which makes it hard to evaluate the actual scope of the proposal.

Suggestion: Be explicit about which repos are in-scope vs. out-of-scope for the initial migration vs. future phases. A table with columns like Repo | Phase | Rationale would make this concrete and actionable. The ambiguity here is generating multiple review threads (evals, samples, mcp-server) that could be resolved with clearer scoping.


### Recommendation

The cons are real but manageable — CI complexity is solvable with path-based triggers, GitHub UX limitations can be mitigated with labels and naming conventions, and the migration is a one-time cost. The speed gains from co-location are ongoing: every feature, every port, every doc update benefits from having everything in one checkout. For a single team shipping across multiple languages with heavy agentic development, that daily velocity improvement outweighs the friction.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue: No success criteria or metrics are defined. Without these, it's hard to evaluate whether the migration achieved its goals or whether to revisit the decision later.

Suggestion: Add a "Success Metrics" section with measurable outcomes, e.g.:

  • Reduction in time-to-merge for cross-cutting features
  • Reduction in number of PRs needed for a single logical change
  • Developer satisfaction / friction surveys
  • CI pipeline reliability and speed

Also define a timeframe for reassessment (e.g., "revisit after 6 months if per-language teams form").

- **Unified PRs**: documentation lives in the feature branch alongside the code. Doc development can be done in tandem with implementation rather than being a separate step.
- **Centralized information**: one place for skills, agents, patterns, etc.

### What becomes harder
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue: The document doesn't address the impact on the external open-source community. Strands is an OSS project — external contributors currently find their way to sdk-python or sdk-typescript naturally. A cross-language monorepo changes discoverability, issue filing, and contribution patterns.

Suggestion: Add a subsection under "What becomes harder" addressing:

  • How external contributors discover and navigate the monorepo
  • How issue triage works when all issues land in one tracker
  • Whether the individual SDK repos will remain as read-only mirrors or archives (common pattern for discoverability)
  • Impact on GitHub stars/community signal (briefly mentioned in L61 but not with mitigation)

@@ -0,0 +1,302 @@
# Consolidate Strands SDK Repos into a Mono Repository
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue: The document deviates from the design document template defined in designs/README.md. Missing sections: Issue link in the header, explicit Alternatives Considered section, and Willingness to Implement.

Suggestion: While this is an infrastructure/process proposal rather than a feature, aligning with the template helps reviewers find information in expected places. At minimum, consider adding an explicit "Alternatives Considered" section that summarizes the options (monorepo-per-language à la Azure, status quo with better tooling, partial consolidation of just sdk-python + sdk-typescript) with brief tradeoff notes — the Appendix A material is thorough but buried in a collapsible block.


But those projects have dedicated teams per language. Azure has a Python team and a separate JS team. Google Cloud has separate teams per language. Their reasons for staying separate — independent contributor pools, independent release cadences, independent backlogs — don't apply to us. We're a single team implementing the same features across multiple languages, shooting for feature parity. That's a fundamentally different workflow, and it's the reason co-location helps us where it wouldn't help them.

This whole argument falls apart if that stops being true. If we eventually have dedicated per-language teams, or want the SDKs to diverge, then co-location is just noise and we should revisit.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue: The document states the assumption "every member is expected to implement features in all SDKs" and "we release both SDKs in lockstep for feature parity" as current facts, then acknowledges "This whole argument falls apart if that stops being true" (L77). However, there's no discussion of how likely this is to change or what the exit strategy looks like.

Suggestion: Given that multiple reviewers have raised concerns about future language additions and feature divergence, consider adding a brief "Reversibility" section. How expensive is it to split the monorepo back out if the team structure changes? Is there a "point of no return" where shared tooling makes separation impractical?


We have a single team working across both languages, where every member is expected to implement features in all SDKs. Docs are tightly coupled to those implementations, and both humans and agents benefit from co-location.

Given all of that, we should consolidate the core SDK repos into a single mono repository.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue: The document thoroughly covers why to consolidate but is thin on how. For a change of this magnitude, reviewers need to evaluate feasibility and risk alongside motivation.

Suggestion: Add a "Migration Plan" or "Implementation" section covering:

  • Phasing strategy (e.g., start with sdk-python + sdk-typescript + docs, then expand)
  • Directory layout in the target monorepo
  • How existing open PRs/issues will be handled
  • CI/CD setup approach (path-based triggers, separate workflows per project)
  • Rollback plan if the migration creates unforeseen problems
  • CODEOWNERS / permission model (multiple reviewers raised this concern)

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

Assessment: Comment (Request Revisions)

The research and analysis are thorough — the industry survey and size benchmarks are genuinely useful reference material. The case for consolidation is well-argued. However, this document is heavy on motivation and light on execution, which makes it difficult for the team to approve with confidence.

Review Themes
  • Missing "how": The document needs a concrete migration plan (phasing, directory layout, CI strategy, CODEOWNERS, rollback plan) to move from proposal to actionable decision. Multiple existing reviewers have flagged this same gap.
  • Scope ambiguity: Vague language around which repos move ("probably", "parts of") is generating unresolved discussion threads. Making scope explicit (with phases) would collapse several open questions.
  • Missing template sections: The design doc template calls for Alternatives Considered, Issue link, and success criteria — adding these would strengthen the proposal and help future readers understand the decision context.
  • Reversibility and exit criteria: Given the acknowledged assumption that "this falls apart if team structure changes," the proposal should address how expensive reversal would be and when to reassess.

The appendices are excellent and will serve as valuable reference material regardless of the final decision.


The candidates for consolidation are the repos tightly coupled to the SDK, the ones where we're doing a lot of overlapping work:
- `sdk-python`, `sdk-typescript`, `docs`: these are the core. Cross-repo work here is constant.
- `samples`, `mcp-server`, parts of `devtools`: probably move these too. They're closely tied to SDK development.
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Include mcp-server

- `samples`, `mcp-server`, parts of `devtools`: probably move these too. They're closely tied to SDK development.

The repos that stay independent are the ones where there isn't a lot of overlap with day-to-day SDK work:
- `evals`, `agent-builder`, `agent-sop`, `tools`: these are more standalone projects.
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Team aligned include evals from the beginning - still want to know what the post-1.0 story is

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants