In most software teams, frontend and backend code live in separate repositories. This has been a common and reasonable setup for years. Backend teams own APIs, databases, services, and infrastructure. Frontend teams own UI, state management, pages, and user interactions.
This separation works well when humans are coordinating the work. But AI agents are changing the shape of software delivery.
When an AI agent is asked to implement a feature, it needs context. Not just the file it is editing. Not just the function it is changing. It needs to understand the product behavior, backend contract, frontend usage, schema expectations, tests, and edge cases.
That is where the traditional split between frontend and backend repositories starts to become painful.
At CosX, as we build more AI-assisted and agentic engineering workflows, we are increasingly thinking about the role of monorepos — not as a fashionable architecture choice, but as a practical way to give AI agents better context.
A monorepo is not a monolith. A monorepo is a context strategy.
A monolith is an application architecture where many responsibilities are bundled into one deployable system. A monorepo is a repository strategy where multiple parts of a product — backend, frontend, contracts, tests, documentation, and sometimes infrastructure — live in the same source repository.
The distinction matters.
A monorepo does not mean one deployment.
A monorepo does not mean one runtime.
A monorepo does not mean backend and frontend become tightly coupled.
A monorepo simply means that the engineering source of truth is unified.And in the age of AI agents, that unified context can become a serious advantage.
The problem with separate frontend and backend workflows
In a traditional setup, a backend ticket may introduce a new API endpoint.
GET /api/reports/activity/The backend engineer implements the endpoint, adds tests, raises a pull request, and merges it. Then a frontend ticket is created. The frontend engineer reads the API contract, asks clarifying questions, integrates the endpoint, handles loading and error states, and raises a separate pull request.
This workflow works, but it creates delays and coordination overhead.
With AI agents, the gap becomes even more visible. A backend agent may not know how the frontend currently consumes similar APIs. It may not know which component will use the new response. It may not know whether a field name conflicts with frontend conventions. It may not know whether the frontend expects pagination, status labels, enum values, or a specific error structure.
Similarly, a frontend agent may not understand the backend model, permissions, business rules, or why an API behaves in a certain way.
[ Backend Repo ] ── Manual handoff ──▶ [ Frontend Repo ]
API is implemented. Contract is interpreted.
Tests pass. UI is updated later.
PR is merged. Integration issues surface late.So the workflow becomes fragmented:
Backend agent changes API
Frontend agent separately integrates API
Human reviews both
Issues are discovered late
Contracts are corrected
More back-and-forth happensThe problem is not that AI agents are weak. The problem is that they are operating with partial context.
Why monorepos matter for AI agents
AI agents are only as good as the context they can reason over.
When backend, frontend, contracts, and tests live together, the agent can understand the full feature boundary.
Instead of seeing only:
Build an API endpointthe agent can see:
Build an API endpoint
Update the contract
Generate frontend types
Update the consuming component
Add frontend state handling
Add end-to-end coverage
Prepare one full-stack pull requestThis is a major shift. The monorepo becomes more than a code organization strategy. It becomes an execution environment for agents.
A good monorepo can contain:
apps/
api/
web/
packages/
contracts/
shared/
docs/
specs/
architecture/
tests/
e2e/
infra/
deployment/Now the agent has access to the full chain:
Spec → Backend → API Contract → Frontend → Tests → Deployment NotesThis is exactly what agentic engineering needs.
Monorepo as a context layer
For humans, context can live in conversations, meetings, Slack threads, Jira comments, and memory. For AI agents, context needs to be explicit and discoverable.
A monorepo helps because the agent can inspect related parts of the system without switching repositories, authentication contexts, commands, or mental models.
For example, when implementing a new dashboard feature, the agent can read:
- The product spec
- Existing backend models
- Existing API patterns
- OpenAPI or schema definitions
- Frontend components using similar APIs
- Shared enum definitions
- Existing end-to-end tests
- Styling and state management conventions
This reduces guesswork. In separate repositories, these pieces may exist, but they are scattered. In a monorepo, the system can be organized around product intent instead of team boundaries.
The CosX way: contract-driven monorepo
At CosX, we think the best version of this is not simply putting backend and frontend folders together. That is only physical proximity.
The real value comes when the monorepo has a contract layer.
A contract layer defines the agreement between backend and frontend. This can include:
- API schemas
- Generated TypeScript types
- Shared enums
- Request and response examples
- Error formats
- Pagination rules
- Permission behavior
- Status mappings
- End-to-end tests
Spec → Backend → Contract → Frontend → E2E
• Spec: Product intent and acceptance criteria.
• Backend: Models, services, APIs, permissions.
• Contract: OpenAPI, generated types, shared enums.
• Frontend: Pages, components, states, interactions.
• E2E: User-flow verification and release confidence.A possible structure looks like this:
project-root/
docs/
specs/
feature-spec.md
apps/
api/
...
web/
...
packages/
contracts/
openapi.yaml
generated-types.ts
api-client.ts
shared/
enums.ts
constants.ts
tests/
e2e/
feature-flow.spec.tsThis structure makes the contract visible. The backend does not silently invent response shapes. The frontend does not guess what the backend returns. The agent does not need to infer everything from scattered implementation details.
CosX principle — Keep deployment modular. Keep engineering context unified. Keep contracts explicit.
Backend and frontend can still be deployed separately. The API can still have its own runtime. The frontend can still be hosted independently. Infrastructure can still be modular.
But the engineering workflow benefits when one feature can be understood, implemented, tested, and reviewed in one place.
A high-level CosX-style agentic workflow could look like:
1. Read the product requirement
2. Inspect backend, frontend, and contracts
3. Identify what changes across the stack
4. Implement backend changes
5. Update the API contract
6. Generate frontend types or client code
7. Update frontend usage
8. Run backend tests
9. Run frontend tests
10. Run end-to-end tests
11. Raise one feature-level pull requestThe goal is not to remove human review. The goal is to make the pull request more complete.
Advantages of monorepos for agentic engineering
1. Better context for AI agents
The most obvious advantage is context. AI agents perform better when they can see the existing patterns around the work. In a monorepo, the agent can inspect both the producer and consumer of a contract.
For example, if a backend response changes from:
{
"status": "active"
}to:
{
"status": "ACTIVE"
}the agent can also find frontend places where the old value was used. That reduces broken integrations.
2. Stronger contract enforcement
A monorepo makes it easier to enforce API contracts. The backend can generate an OpenAPI schema. The frontend can consume generated types. End-to-end tests can verify that real user flows still work.
Backend changes schema
Contract is updated
Frontend types are regenerated
Compilation fails if frontend usage is wrong
Tests catch behavior mismatchesThis is extremely useful for AI-assisted development. Instead of relying only on the agent’s reasoning, we let the contract and tests act as guardrails.
3. One feature, one pull request
Separate repositories often create separate pull requests for one product feature. That makes review harder. The backend PR may look correct in isolation. The frontend PR may look correct in isolation. But the real question is whether the complete feature works.
A monorepo allows one feature-level PR:
Backend implementation
API contract update
Frontend integration
End-to-end test
Documentation updateThis makes the review closer to the actual product change.
4. Easier end-to-end testing
End-to-end tests become more natural in a monorepo. The test can cover the full flow:
Create data through API
Open frontend page
Apply filter
Verify UI output
Check error state
Verify permissionsFor agentic engineering, this is important because generated code can look correct at the unit level but fail at the user-flow level.
5. Better shared conventions
A monorepo makes it easier to maintain shared conventions: enum values, API error formats, date formatting rules, status labels, permission names, UI state conventions, generated API clients, feature flag names, logging, and analytics contracts.
Without a shared place for these conventions, teams often duplicate them. Duplication creates drift. Drift creates bugs. Bugs create manual coordination.
6. Faster onboarding for humans and agents
A well-structured monorepo is easier to explain. A new engineer or AI agent can start from the spec and follow the flow:
docs/specs → apps/api → packages/contracts → apps/web → tests/e2eThis gives a clear map of how product ideas become working software.
Risks and mitigation strategy
A monorepo is not automatically better. If done carelessly, it can create a large, slow, tightly coupled, hard-to-review system. This is especially dangerous with AI agents because agents may over-edit, over-refactor, or touch unrelated parts of the repo if boundaries are not clear.
The decision is not:
Monorepo good, multi-repo bad.The better question is:
Can we design a monorepo that improves context without increasing coupling?Risk What can go wrong Mitigation
-------------------- -------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------
Context overload The agent may read irrelevant files, copy the wrong pattern, or modify unrelated code. Use clear AGENTS.md / CLAUDE.md guidance, architecture docs, scope rules, and first-files-to-read instructions.
Accidental coupling Frontend starts depending on backend internals instead of public contracts. Frontend should consume generated API types and clients. Backend implementation must stay behind explicit contracts.
Slow CI Every change triggers every test, making agent loops and human feedback slow. Use path-based CI. Run focused checks for PRs and full checks before merge or release.
Large PRs Full-stack PRs become too large to review safely. Keep one feature per PR. Structure the PR by backend, contract, frontend, tests, risks, and screenshots/API examples.
Ownership confusion Review responsibility becomes unclear because everything is in one repo. Use code ownership rules for api, web, contracts, infra, and shared packages.
Deployment confusion Teams assume one repo means everything must deploy together. Keep separate deployment pipelines for backend, frontend, and infra. Unified repo does not mean unified deployment.
Agentic scope creep Agents may refactor unrelated files, update dependencies, or broaden the ticket scope. Define strict rules: no unrelated refactors, no public API changes outside scope, no dependency updates unless required.The ideal balance
The best monorepo is not just a big folder containing everything. The best monorepo is a structured product workspace.
It should make the right thing easy:
- Specs are easy to find.
- Contracts are explicit.
- Backend and frontend boundaries are clear.
- Shared types are generated.
- Tests are close to the feature.
- CI runs only what is needed.
- Ownership is visible.
- Agents have clear instructions.
A monorepo should improve coordination without weakening architecture.
When not to use a monorepo
A monorepo is not always the right answer. It may not be useful when:
- Backend and frontend are owned by completely separate organizations.
- Release cycles are fully independent.
- The product surface is very loosely connected.
- The repository would contain many unrelated products.
- The team does not have CI discipline.
- There are no shared contracts or full-stack workflows.
- The monorepo would become a dumping ground.
For CosX, the right model is not one giant repository for everything. A better model is:
One monorepo per product or client platform.A practical monorepo structure for agentic engineering
A clean structure could look like this:
product-root/
AGENTS.md
README.md
docs/
specs/
architecture/
apps/
api/
web/
packages/
contracts/
shared/
tests/
e2e/
infra/
docker/
deployment/Unified context
Specs, APIs, UI, shared contracts, and tests live close enough for agents and humans to reason across the product.
Modular deployment
The backend, frontend, and infrastructure can still build and deploy independently from the same repository.
This structure is simple, but powerful. It gives both humans and agents a clear map.
The future: product-level agentic workflows
The biggest benefit of monorepos is that they allow agentic workflows to become product-level instead of repo-level.
Instead of saying:
Backend agent, implement this endpoint.
Frontend agent, integrate this endpoint.
QA agent, test this feature.we can move toward:
Agent, implement this product feature across the stack.That does not mean the agent works without review. It means the agent can produce a complete first version:
Backend logic
API contract
Frontend integration
Tests
PR summary
Handoff notesThe human reviewer then reviews the full product change, not disconnected fragments.
This is where monorepos become strategically important. They are not just about code management. They are about giving AI agents the environment they need to reason across the product.
Conclusion
As AI agents become more capable, software teams will need to rethink how they organize code and context.
Separate frontend and backend repositories are not wrong. They may continue to work well for many teams.
But for teams building agentic engineering workflows, monorepos offer a compelling advantage: they bring product context, implementation, contracts, and tests closer together.
At CosX, our direction is clear: unified engineering context, modular deployment, explicit contracts, and bounded agent autonomy.
The goal is not to build a monolith. The goal is to build a better context layer for humans and AI agents.
In the past, repo structure was mostly a team coordination decision.
In the age of agentic engineering, repo structure becomes an AI context decision.
And that may make monorepos one of the most important engineering choices for AI-native software teams.


