Unified AI-ready workspace generator for multi-repo projects
Project description
Project Loom — Multi-Repo AI Workspace Generator
Project Loom unifies multi-repository development by generating AI-ready workspace configurations. Define your repos, dependencies, and impact zones once—Loom generates everything: symlinks, orchestration scripts, and AI tool configs (Claude Code, Codex, Cursor, Aider).
Why Project Loom?
When you're working across 3+ repositories:
- Scattered configs — Claude Code, Codex, Cursor, Aider each need different markdown formats
- Manual orchestration — Running tests/installs across repos is shell-script spaghetti
- Lost context — Which files are risky to change? Which repos will break?
- Repeated setup — Every team member re-discovers the same patterns
Loom solves this:
# Define your workspace once
loom init
# Apply to your local machine
loom apply
# Everything works together
loom install # Install all repos
loom test-all # Run all tests
loom status # Git status across workspace
loom sync-commit "bugfix: auth token expires correctly" # Atomic multi-repo commit
Quick Start
Installation
pip install project-loom
Or install from source:
git clone https://github.com/ypollak2/project-loom
cd project-loom
pip install -e .
Usage
1. Create a configuration (interactive)
loom init
This launches an interactive wizard that asks about your repos, dependencies, and AI tools. Outputs loom.yaml.
2. Apply the configuration
loom apply loom.yaml
This:
- Clones repositories (if not already cloned)
- Creates symlinks in
meta-workspace/services/ - Generates AI tool configs (
.claudecode.md,.cursorrules, etc.) - Generates
scripts/loomorchestration CLI
3. Use the workspace
# Run tests in all repos
loom test-all
# Git status across all repos
loom status
# Health check all repos
loom doctor
# Synchronized commit across dirty repos
loom sync-commit "message"
Core Commands
| Command | Purpose |
|---|---|
loom init |
Interactive wizard to create loom.yaml |
loom apply [yaml] |
Clone repos, create symlinks, generate AI configs |
loom validate [yaml] |
Validate YAML against schema |
loom install |
Run install commands in all repos |
loom test-all |
Run tests in all repos |
loom doctor |
Run health checks in all repos |
loom status |
Git status across all repos |
loom diff |
Git diffs across all repos |
loom pull |
Git pull --ff-only across all repos |
loom logs [--count N] |
Recent commits across all repos |
loom sync-commit <msg> |
Commit to all dirty repos with shared trailer |
Configuration (loom.yaml)
Complete Schema
# Workspace metadata
name: my-workspace # Workspace name (required)
description: "Your description" # Workspace description (required)
# Repositories
repos:
- name: api # Unique repo name
url: https://github.com/user/api
role: backend # Role in ecosystem
language: python # python | typescript | golang | rust
local_path: ~/Projects/api # Optional; defaults to ~/Projects/<name>
install_command: pip install -e .
test_command: pytest
doctor_command: python -m app doctor
# Cross-repo dependencies
dependencies:
- from: client
to: api
description: REST API calls
# Cross-repo impact zones
impact_zones:
- id: IZ-001
name: Auth Flow Changes
risk: HIGH # HIGH | MEDIUM | LOW
source:
repo: api
file: src/auth.py
function: verify_token
target:
repo: client
trigger: When auth middleware changes
shared_env: # Shared environment variables
- AUTH_SECRET
- JWT_EXPIRY
# AI tool configuration flags
ai_tools:
claude_code: true # Generate .claudecode.md
codex: false # Generate .codex-plugin/
cursor: false # Generate .cursorrules
aider: false # Generate AGENTS.md
Real-World Example
See examples/llm-router-chronicle/loom.yaml for a complete implementation with:
- 2 repos (Go + Python services)
- 1 dependency (REST API)
- 7 impact zones tracking auth, caching, and protocol changes
Generated Artifacts
After running loom apply, you get:
meta-workspace/
├── .claudecode.md # Claude Code AI context
├── .cursorrules # Cursor IDE rules
├── .codex-plugin/ # Codex configuration
│ └── loom-context.md
├── AGENTS.md # Aider task agents
├── services/
│ ├── repo-a → ~/Projects/repo-a (symlink)
│ └── repo-b → ~/Projects/repo-b (symlink)
├── configs/
│ └── dependency-graph.json
└── scripts/
└── loom # Bash orchestration CLI
Commands
loom init [--output PATH]
Interactive wizard to create loom.yaml.
loom apply YAML [--workspace PATH]
Apply configuration: clone repos, create symlinks, generate AI configs.
loom status [--config PATH]
Git status of all repos.
loom test-all [--config PATH]
Run tests in all repos.
loom install [--config PATH]
Install all repos (run install_command for each).
loom doctor [--config PATH]
Health check all repos (run doctor_command for each).
loom diff [--config PATH]
Git diff summary all repos.
loom logs [--config PATH] [--count N]
Show last N commits per repo.
Design Principles
-
loom.yamlis the single source of truth — commit it to version control so your whole team can runloom applyand get identical workspaces. -
Generators are pure functions — they take
LoomConfigand return strings. Easy to test, easy to extend. -
applyis idempotent — safe to re-run. Won't duplicate content or break existing symlinks. -
No mutation of existing code — loom only creates net-new files under
meta-workspace/. Your repos are untouched. -
Impact zones are explicit — document cross-repo dependencies upfront so teams understand consequences before coding.
Extending Loom
Adding a New AI Tool
- Create
loom/generators/mytool.pywith agenerate_mytool(config: LoomConfig) -> strfunction - Add to
loom/generators/__init__.py - Add to
loom/workspace.py's_generate_ai_configs() - Add to
AIToolsmodel inloom/config.py
Customizing Generators
Edit loom/generators/*.py to change output format for any AI tool. For example, to add custom rules to .claudecode.md, modify loom/generators/claude_code.py.
Development
# Install with dev dependencies
pip install -e '.[dev]'
# Run tests
pytest
# Format code
black loom
# Lint
ruff check loom
License
MIT
See Also
- Chronicle — Architectural decision memory layer
- LLM Router — LLM dispatch and budget management
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file project_loom-0.5.1.tar.gz.
File metadata
- Download URL: project_loom-0.5.1.tar.gz
- Upload date:
- Size: 176.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c0b3d7fe3dbe2caa85b0a6d96c78bb96a1c593659f79220db2b42df8889506f
|
|
| MD5 |
f3a77715352f952def40965b694796ee
|
|
| BLAKE2b-256 |
4649c58a700a91126fffb1b1484aa6c909cd27e360de6456bd96ac7238d80429
|
File details
Details for the file project_loom-0.5.1-py3-none-any.whl.
File metadata
- Download URL: project_loom-0.5.1-py3-none-any.whl
- Upload date:
- Size: 32.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78127c20578f3cd8a95016f320b6bbd008279828e3a79c2fff1b0ab57788b67d
|
|
| MD5 |
5fc76a9a84790155309d1cac504597ae
|
|
| BLAKE2b-256 |
18a1e9e227da410eadc65f6d4966f33d9a82d1835efc1a355414f3f1f449213e
|