metagit-campaign · diff
git:20260706.313ccc0 to git:20260912.e378115
38 added, 1 removed. Audit A to B.
---
name: metagit-campaign
description: Plan and track cross-project multi-repo campaigns — YAML overlays, repo rollups, objective fan-out, and MR status. Use for umbrella-scale coordinated work.
---
# Metagit campaign skill
<!-- modality:native_campaigns -->
+ <!-- modality:campaign_everroom_context -->
<!-- modality:objective_mr_approval_binding -->
<!-- modality:coordination_events_scope -->
Use when coordinating **many repos** under one intent (rollout, migration, tier stamp) with a committed, diffable status overlay.
- Docs: [campaigns.md](https://metagit-ai.github.io/metagit-cli/reference/campaigns/) · Registry: [modality-feature-registry.md](https://metagit-ai.github.io/metagit-cli/reference/modality-feature-registry/)
+ Docs: [campaigns.md](https://metagit-ai.github.io/metagit-cli/reference/campaigns/) · [campaign-everroom.md](https://metagit-ai.github.io/metagit-cli/reference/campaign-everroom/) · Registry: [modality-feature-registry.md](https://metagit-ai.github.io/metagit-cli/reference/modality-feature-registry/)
## When to use
- One selection query → frozen repo list → per-repo status/MR tracking
- Fan-out spine objectives for parallel agents (`campaign expand`)
- Rollup: merged vs open MR vs blocked without manual spreadsheets
+ - Combined **Campaign Context** from MetaGit topology plus optional EverRoom evidence
## Configuration
```yaml
# metagit.config.yaml
workspace:
campaigns_path: _campaigns # default; or knowledge/campaigns
```
Env: `METAGIT_WORKSPACE_CAMPAIGNS_PATH`
## Lifecycle
```bash
export METAGIT_AGENT_MODE=true
metagit campaign new --slug tier-full --title "Full-tier rollout" \
--query "platform" --tag agent_tier=full
metagit campaign validate
metagit campaign expand --slug tier-full --dry-run
metagit campaign expand --slug tier-full
metagit campaign set --slug tier-full --repo platform/api --status merged --mr "https://…"
metagit campaign status --slug tier-full --json
```
+
+ ## Campaign Context (optional EverRoom)
+
+ <!-- modality:campaign_everroom_context -->
+
+ A campaign is the **technical/work** boundary. An EverRoom Room is the **context/evidence** boundary.
+
+ - **MetaGit answers:** "What exists and what is affected?"
+ - **EverRoom answers:** "What do we know, why did we decide it, and what context surrounds it?"
+
+ When operating on a campaign:
+
+ 1. Identify the campaign slug.
+ 2. Inspect MetaGit technical scope (`campaign status` / `campaign context`).
+ 3. Check whether an EverRoom provider is attached (`campaign everroom status`).
+ 4. Retrieve Campaign Context (`campaign context --json` or MCP `metagit_campaign_context`).
+ 5. Use MetaGit for topology, Git state, and relationships.
+ 6. Use EverRoom for rationale, evidence, decisions, and historical context.
+ 7. Do not treat generated summaries as authoritative over source material.
+ 8. Cite `source=metagit` vs `source=everroom`.
+ 9. Do not retrieve unrelated Room/global context through MetaGit.
+
+ ```bash
+ export METAGIT_EVERROOM_URL=http://127.0.0.1:3210
+ export METAGIT_EVERROOM_TOKEN=… # never put this in YAML, Git, or prompts
+
+ metagit campaign everroom attach --slug terraform-hcp-migration --room room_01J…
+ metagit campaign context --slug terraform-hcp-migration --json
+ metagit campaign everroom sync --slug terraform-hcp-migration
+ metagit campaign everroom detach --slug terraform-hcp-migration
+ ```
+
+ If EverRoom is down, `campaign context` still returns MetaGit-only data with a warning. `attach`/`sync` fail instead of mutating blindly.
+
+ Never store tokens in `_campaigns/*.yml`. Room id ≠ campaign slug.
## Agent posture before repo work
```bash
metagit agent profile show -p platform -n api --json
metagit agent apply --vendor claude_code --project platform --repo api
```
## Orchestrator polling
```bash
metagit context events --campaign tier-full --since "<iso-cursor>" --json
```
## Related skills
- `metagit-multi-repo` · `metagit-control-center` · `metagit-context-pack`