274 lines
4.9 KiB
Markdown
274 lines
4.9 KiB
Markdown
# Multi-Agent AI Integration Reference
|
|
|
|
Detailed configuration and patterns for multi-agent workflows with GitButler.
|
|
|
|
---
|
|
|
|
## Hook Configuration by Platform
|
|
|
|
### Claude Code
|
|
|
|
File: `.claude/hooks.json`
|
|
|
|
```json
|
|
{
|
|
"hooks": {
|
|
"PreToolUse": [
|
|
{
|
|
"matcher": "Edit|MultiEdit|Write",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "but claude pre-tool"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"PostToolUse": [
|
|
{
|
|
"matcher": "Edit|MultiEdit|Write",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "but claude post-tool"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"Stop": [
|
|
{
|
|
"matcher": "",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "but claude stop"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
| Hook | Purpose |
|
|
|------|---------|
|
|
| `but claude pre-tool` | Snapshot before changes |
|
|
| `but claude post-tool` | Auto-assign changes to agent's branch |
|
|
| `but claude stop` | Finalize commits, cleanup |
|
|
|
|
### Cursor
|
|
|
|
```json
|
|
{
|
|
"hooks": {
|
|
"after-edit": "but cursor after-edit",
|
|
"stop": "but cursor stop"
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## MCP Server
|
|
|
|
### Starting
|
|
|
|
```bash
|
|
but mcp
|
|
```
|
|
|
|
### Available Tool
|
|
|
|
**`gitbutler_update_branches`**
|
|
|
|
```typescript
|
|
{
|
|
prompt: string // Description of changes
|
|
}
|
|
```
|
|
|
|
Returns immediately; commits processed asynchronously.
|
|
|
|
### Current Limitations
|
|
|
|
- Single tool available
|
|
- No branch creation
|
|
- No stack operations
|
|
- No push/PR operations
|
|
|
|
---
|
|
|
|
## Multi-Agent Coordination Strategies
|
|
|
|
### Strategy 1: Branch-Per-Agent
|
|
|
|
Each agent owns dedicated branch(es):
|
|
|
|
```bash
|
|
# Agent A owns auth domain
|
|
but branch new agent-a-auth
|
|
but mark agent-a-auth
|
|
|
|
# Agent B owns api domain
|
|
but branch new agent-b-api
|
|
but mark agent-b-api
|
|
|
|
# New changes auto-route to marked branch
|
|
```
|
|
|
|
**Best for:** Independent parallel development
|
|
|
|
### Strategy 2: Shared Branch with Turn-Taking
|
|
|
|
Agents share branch, coordinate via file-based status:
|
|
|
|
```bash
|
|
# File-based coordination
|
|
but status > /tmp/agent-$(whoami)-status.txt
|
|
|
|
# Other agents check before modifying
|
|
```
|
|
|
|
**Best for:** Sequential refinement of same feature
|
|
|
|
### Strategy 3: Stack-Per-Agent
|
|
|
|
Agents own stack levels:
|
|
|
|
```bash
|
|
# Agent A: Foundation layer
|
|
but branch new foundation
|
|
but commit foundation -m "feat: foundation"
|
|
|
|
# Agent B: Build on foundation
|
|
but branch new feature --anchor foundation
|
|
but commit feature -m "feat: feature layer"
|
|
|
|
# Agent C: Tests on top
|
|
but branch new tests --anchor feature
|
|
but commit tests -m "test: comprehensive tests"
|
|
```
|
|
|
|
**Best for:** Layered architecture development
|
|
|
|
### Strategy 4: Review Pairs
|
|
|
|
Author and reviewer agents work in parallel:
|
|
|
|
```bash
|
|
# Author implements
|
|
but branch new author-impl
|
|
|
|
# Reviewer creates sibling for fixes
|
|
but branch new reviewer-fixes
|
|
|
|
# Swap commits as needed
|
|
but rub <commit> <other-branch>
|
|
```
|
|
|
|
**Best for:** Code review cycles
|
|
|
|
---
|
|
|
|
## Status Broadcasting
|
|
|
|
### File-Based
|
|
|
|
```bash
|
|
# Broadcast status
|
|
but status > /tmp/agent-status-$(hostname)-$(date +%s).txt
|
|
|
|
# Other agents poll status files
|
|
```
|
|
|
|
### Issue Tracker Comments
|
|
|
|
```markdown
|
|
[AGENT-A] Completed auth module
|
|
- Branch: agent-a-auth
|
|
- Commits: abc1234
|
|
- Ready for review
|
|
```
|
|
|
|
### JSON for Programmatic Inspection
|
|
|
|
```bash
|
|
# Machine-readable status
|
|
but status --json | jq '.stacks'
|
|
but show feature-branch --json | jq '.commits'
|
|
```
|
|
|
|
---
|
|
|
|
## Agent Instructions Template
|
|
|
|
Add to agent system prompt:
|
|
|
|
```
|
|
## GitButler Rules
|
|
|
|
1. NEVER use `git commit` - use `but commit`
|
|
2. NEVER use `git add` - GitButler manages staging
|
|
3. NEVER use `git checkout` - all branches always applied
|
|
4. ALWAYS check file IDs with `but status` before `but rub`
|
|
5. ALWAYS snapshot before risky operations: `but oplog snapshot`
|
|
6. Return to workspace after git ops: `git checkout gitbutler/workspace`
|
|
|
|
## Your Branch
|
|
- Name: {agent-branch-name}
|
|
- Pattern: {file-pattern}
|
|
|
|
Assign your changes: `but rub <file-id> {agent-branch-name}`
|
|
Commit your work: `but commit {agent-branch-name} -m "your message"`
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting Multi-Agent
|
|
|
|
### Agents modifying same files
|
|
|
|
**Symptom:** Overlapping hunks in unassigned changes
|
|
|
|
**Solution:**
|
|
1. Assign non-overlapping hunks to respective branches
|
|
2. For overlapping lines: coordinate which agent owns them
|
|
3. Use `but mark` rules for clearer ownership
|
|
|
|
### Lost agent work
|
|
|
|
**Recovery:**
|
|
|
|
```bash
|
|
# Check oplog
|
|
but oplog
|
|
|
|
# Undo if recent
|
|
but undo
|
|
|
|
# Or restore from snapshot
|
|
but oplog restore <snapshot-id>
|
|
```
|
|
|
|
### Agent committed with git
|
|
|
|
**Symptom:** Orphaned commit not in GitButler
|
|
|
|
**Recovery:**
|
|
|
|
```bash
|
|
git reflog # Find orphaned commit
|
|
# Create new branch from it
|
|
git branch recovered <commit-sha>
|
|
# Return to GitButler
|
|
git checkout gitbutler/workspace
|
|
```
|
|
|
|
---
|
|
|
|
## References
|
|
|
|
- [GitButler MCP Docs](https://docs.gitbutler.com/features/ai-integration/mcp-server)
|
|
- [Claude Code Hooks Docs](https://docs.gitbutler.com/features/ai-integration/claude-code-hooks)
|
|
- [Cursor Hooks Docs](https://docs.gitbutler.com/features/ai-integration/cursor-hooks)
|