Understanding and operating in meta repository workspaces with .meta/.meta.yaml configuration.
This project is a meta repository - a parent repo that manages a graph of child repositories. Understanding this structure is essential for effective operation.
When you begin working in a meta repo, discover its structure:
meta project list --json
This returns repos, paths, and tags. Use this to:
Run meta git status to see the current state across all repos.
In a meta repo, changes often span multiple repositories. Using meta commands instead of plain git lets you:
The .meta file defines child repositories:
{
"projects": {
"api": "git@github.com:org/api.git",
"web": {
"repo": "git@github.com:org/web.git",
"path": "./frontend/web",
"tags": ["frontend", "typescript"]
}
}
}
Simple format: "name": "git-url" - clones to ./name
Extended format: Object with repo, optional path, optional tags
YAML is also supported (.meta.yaml or .meta.yml).
# List all projects in this workspace
meta project list
# See git status across ALL repos at once
meta git status
When projects have tags, filter operations:
# Only frontend repos
meta --tag frontend git status
# Multiple tags (comma-separated)
meta --tag backend,api exec -- make test
# Exclude specific repos
meta --exclude legacy-service git pull
Meta repos can contain other meta repos. Use --recursive to operate on the entire graph:
# Clone a meta repo and ALL nested meta repos
meta git clone <url> --recursive
# Status across entire graph
meta --recursive git status
The --depth N flag limits recursion depth.
| Command | What It Does |
|---|---|
meta git status |
Git status in ALL repos |
meta git clone <url> |
Clone meta repo + all children |
meta exec -- <cmd> |
Run command in all repos |
meta project list |
List all child projects |
meta init claude |
Install these skills |
When the meta MCP server is available, these tools provide structured JSON for programmatic workspace operations:
| Tool | Purpose |
|---|---|
meta_workspace_state |
Full workspace state in one call (projects, branches, dirty status) |
meta_query_repos |
Filter repos by state: dirty:true, tag:backend, branch:main |
meta_analyze_impact |
Check transitive dependents before modifying a repo |
meta_execution_order |
Get topological build/deploy order respecting dependency graph |
meta git status replaces N individual cd && git status callsmeta --include repo1,repo2 exec -- cmd operates on exactly the repos you needmeta --tag backend exec -- cargo test scopes to tagged reposmeta_analyze_impact <repo> shows who depends on a repo before you modify it — prevents cascading fix-up commitsmeta project list --json first to get the workspace map