Metagit rewrite campaign skill
Use when one source repo is the specification and one target repo is the rewrite — for example migrating metagit-cli from Python to Rust — under a single umbrella workspace.
Docs: metagit-rewrite-workspace.md · campaigns.md
When to use
- Two-repo (or small N-repo) rewrite with frozen
reference_impl - Module parity tracked in
_rewrite/parity-registry.yml(BYO convention) - Orchestrator + subagents: controller sequences phases; repo agents implement
- MR rollups and objective spine without a separate spreadsheet
When not to use
- Simple single-repo feature work →
metagit-multi-repoor repo-scoped skills - Many-repo rollout without a reference pair →
metagit-campaignalone - You need automated AST/module diff gates → extend parity registry + CI yourself
Quick start
export METAGIT_AGENT_MODE=true
# Bootstrap coordinator (or copy examples/metagit-rewrite/.metagit.yml)
metagit init ./rewrite-coordinator --create --template metagit-rewrite
cd rewrite-coordinator
metagit config validate
metagit project sync --project rewrite
# Campaign (if not created by init template)
metagit campaign new --slug language-rewrite --title "Language rewrite" \
--repo rewrite/source --repo rewrite/target \
--reference rewrite/source \
--goal "CLI and MCP parity with reference implementation"
metagit campaign validate
metagit campaign expand --slug language-rewrite --dry-run
Granularity model
| Layer | Where it lives | Granularity |
|---|---|---|
| Workspace pair | .metagit.yml projects/repos |
Repo |
| Campaign rollup | _campaigns/<slug>.yml |
Repo status, MR, notes |
| Module parity | _rewrite/parity-registry.yml |
Phase → module → paths |
| Active work | .metagit/sessions/objectives.json |
Objective id + acceptance |
| Cross-repo edge | graph.relationships |
Source ↔ target semantics |
Objective id convention: rewrite-<phase>-<module> (see objectives.example.json in examples).
Orchestrator session loop
1) Bootstrap context
metagit context pack --tier 2 --json -c .metagit.yml
metagit prompt workspace -k session-start --text-only -c .metagit.yml
metagit campaign status --slug language-rewrite --json
2) Pick the next parity module
Read _rewrite/parity-registry.yml. Choose the first module with status: pending
in the earliest incomplete phase. Upsert a workspace objective:
echo '{"id":"rewrite-foundation-config-manager","title":"Parity: config manager","status":"in_progress","repos":["rewrite/target"],"acceptance":"Target loads source manifest fixtures"}' \
| metagit context objective set
3) Dispatch subagent (target repo)
metagit agent profile show -p rewrite -n target --json
metagit agent apply --vendor claude_code --project rewrite --repo target
metagit context repomix --profile rewrite-target --project rewrite --repo target
metagit prompt repo -k subagent-handoff --text-only -c .metagit.yml \
--project rewrite --repo target
Source analysis before large extractions:
metagit context repomix --profile rewrite-source --project rewrite --repo source
# GitNexus impact on source symbols (when indexed)
4) Record progress
metagit campaign set --slug language-rewrite --repo rewrite/target \
--status mr-open --mr "https://github.com/org/repo/pull/1"
echo '{"id":"rewrite-foundation-config-manager","status":"done","mr_url":"https://…"}' \
| metagit context objective set
Update parity registry module status in _rewrite/parity-registry.yml when acceptance passes.
5) Poll coordination (orchestrator)
metagit context events --campaign language-rewrite --since "<iso-cursor>" --json
metagit context handoff list --json
metagit campaign status --slug language-rewrite --json
Bundled script
SKILL_ROOT="$(python3 -c "import metagit, pathlib; print(pathlib.Path(metagit.__file__).parent / 'data/skills/metagit-rewrite-campaign')")"
"$SKILL_ROOT/scripts/rewrite-orchestrator-cycle.sh" . language-rewrite
Or from a full skill install:
./scripts/rewrite-orchestrator-cycle.sh . language-rewrite
Repomix profiles
Bundled profiles for scoped repo context:
| Profile | Use |
|---|---|
rewrite-source |
Reference implementation analysis |
rewrite-target |
Implementation work in the rewrite tree |
metagit context repomix --profile rewrite-source --project rewrite --repo source
metagit context repomix --profile rewrite-target --project rewrite --repo target
Safety
- Treat source as spec until parity is explicitly marked done in the registry
- Commit
_campaigns/and_rewrite/to git for reviewable rollups - Run
metagit campaign validateandmetagit config validatein CI - Use approvals for schema-breaking or destructive sync operations
campaign expand --dry-runbefore fanning out many objectives
Related skills
metagit-campaign— campaign YAML lifecycle and expandmetagit-multi-repo— cross-repo implementation sequencingmetagit-control-center— MCP control-plane polling loopmetagit-context-pack— tier 0/1/2 session boundariesmetagit-gitnexus— impact analysis on the source repometagit-graph-maintain— durablegraph.relationshipsfor source/target edges