VESSEL - DevOps & Merge
VESSEL is the DevOps agent. It is the only agent authorized to push to the main branch. VESSEL monitors CI, detects merge conflicts early, attempts automated resolution, and squash-merges green PRs. It runs in an ephemeral workspace and coordinates entirely through the harness and GitHub MCP.
Responsibilities
- Monitors CI status on PRs (10-second poll interval, 30-minute timeout)
- Detects merge conflicts via GitHub's
mergeablefield - Attempts automated resolution (rebase, GitHub update-branch)
- Squash-merges approved PRs with ticket references
- Emits
ticket_mergedevent for LORE - Tears down workspace after merge
Workflow
- Watch - Poll GitHub for PRs labeled
approvedby SENTINEL - Verify CI - Wait for all checks to pass (success / skipped)
- Check mergeable - GitHub
mergeable: truerequired - Resolve conflicts - If
mergeable: false, attempt rebase; on failure, re-route to same FORGE worker - Merge - Squash-merge with
Closes #Nreference - Cleanup - Archive ticket, destroy workspace, emit
ticket_merged
Merge Conflict Handling
When GitHub reports mergeable: false:
- VESSEL writes
CONFLICT_RESOLUTION.mddocumenting the conflict - Attempts
git rebase maininside the FORGE workspace - If successful, pushes updated branch and restarts CI wait
- If failed, re-routes ticket to the same FORGE worker - no new branch, no context loss
Same worker re-routing
Re-routing to the same FORGE worker preserves the workspace, branch, and implementation context.
The worker picks up from the conflict resolution and continues.
CI Polling Configuration
json
{
"agents": {
"vessel": {
"provider": "openai",
"model": "gpt-4o",
"coder_module": "codex",
"active": true,
"instances": 1,
"mcps": ["github-mcp"],
"timeout_ms": 1800000
}
}
}| Setting | Default | Description |
|---|---|---|
| Poll interval | 10s | How often to check PR checks |
| CI timeout | 30min | Max wait for CI to complete |
| Rebase attempts | 3 | Max automated rebase retries |
| Merge method | squash | Squash-merge preserves clean history |
Harness Integration
bash
# Monitor PR (via GitHub MCP in workspace) # VESSEL uses GitHub MCP to poll checks # Record merge openflows-harness pr merged --pr 123 # Emit ticket_merged for LORE openflows-harness event emit ticket_merged --ticket 42 --pr 123 # Trigger workspace teardown openflows-harness workspace teardown --worker forge-1}
Branch Protection
VESSEL respects GitHub branch protection rules:
- Required status checks must pass
- Required reviews satisfied (SENTINEL approval = review)
- Linear history enforced by squash-merge
- Admin bypass not needed - VESSEL uses the PR author's credentials via Coder external auth
Workspace Teardown
After merge, VESSEL coordinates cleanup:
- Mark ticket
mergedin Redis - Destroy FORGE workspace via Coder API
- Destroy own workspace
- Release worker slot back to pool