A Python monorepo example demonstrating LangGraph agents with shared packages.
python-monorepo-example/
├── libs/
│ ├── shared/ # Real package with pyproject.toml
│ │ ├── pyproject.toml
│ │ └── src/shared/
│ │ ├── __init__.py
│ │ └── utils.py # get_dummy_message(), get_shared_timestamp()
│ └── common/ # Faux package (no pyproject.toml)
│ ├── __init__.py
│ └── helpers.py # get_common_prefix()
├── apps/
│ ├── agent1/
│ │ ├── langgraph.json # deps: ["../../libs/shared", "../../libs/common"]
│ │ ├── pyproject.toml
│ │ └── src/agent1/
│ │ ├── __init__.py
│ │ ├── state.py
│ │ └── graph.py # Simple single-node LangGraph
│ └── agent2/
│ ├── langgraph.json # deps: ["../../libs/shared", "../../libs/common"]
│ ├── pyproject.toml
│ └── src/agent2/
│ ├── __init__.py
│ ├── state.py
│ └── graph.py # Simple single-node LangGraph
├── pyproject.toml # Root project with shared dependencies
├── .gitignore
└── README.md
libs/shared/: Real Python package withpyproject.toml, containing utility functionslibs/common/: Faux package (directory with Python files, nopyproject.toml)
- There is a root
pyproject.tomlthat contains shared dependencies for all your agents
- Each agent has
langgraph.jsonwith"dependencies": ["../../libs/shared", "../../libs/common", "."] - Each agent has its own
pyproject.tomlfor agent-specific dependencies
Each agent can be run independently using the LangGraph CLI, and both will have access to the shared utility functions via the dependency configuration. For monorepo support, you can run your build command from the root, getting the benefits of the shared dependencies.
langgraph build -t python-monorepo-agent-1 -c apps/agent1/langgraph.json
langgraph up -c apps/agent1/langgraph.json --image IMAGE_ID_GENERATED_ABOVElanggraph build -t python-monorepo-agent-2 -c apps/agent2/langgraph.json
langgraph up -c apps/agent2/langgraph.json --image IMAGE_ID_GENERATED_ABOVE