Detect domain from context and find appropriate team member
team-routing follows the SKILL.md standard. Use the install command to add it to your agent stack.
---
name: team-routing
description: Detect domain from context and find appropriate team member
---
# Team Routing Skill
Automatically detect domain from branch names or file paths and find the appropriate reviewer.
## When to Use
- Push PR mode: auto-assign reviewer
- Init mode: show domain context
- Any mode needing domain owner lookup
## Phases
### Phase 1: Extract Keywords
Extract domain keywords from context:
**From branch name:**
```
feature/tables-filter → keywords: ["tables"]
fix/auth-token-expired → keywords: ["auth"]
chore/settings-refactor → keywords: ["settings"]
```
**From changed files:**
```bash
git diff --name-only origin/develop | head -20
```
Match file paths against known patterns:
- `apps/web/features/tables/` → "tables"
- `apps/api/routes/auth/` → "auth"
- `apps/web/features/settings/` → "settings"
### Phase 2: Query Notion Domains Database
```
API-query-database: [Domains-DB-ID]
Filter: Keywords contains [extracted-keyword]
OR Codebase_Paths contains [file-pattern]
```
**Expected result:**
- Domain name
- Topology type (stream-aligned, platform, enabling, complicated-subsystem)
- Primary keywords
### Phase 3: Query Team Capabilities
```
API-query-database: Team Capabilities
Filter: Primary_Domain matches [domain-name]
AND Availability = "Available"
Sort: Open_PR_Count ASC
```
**Expected result:**
- Person name
- GitHub handle
- Max Open PRs
- Current Open PR count
### Phase 4: Check Availability
For each candidate:
1. Query current open PRs:
```bash
gh pr list --state open --author [github_handle] --json number | jq length
```
2. Compare against Max_Open_PRs threshold
3. Skip if at or over capacity
### Phase 5: Fallback Logic
If no available primary owner:
1. **Backup Owners:** Query Skills table for overlapping skills
2. **Skills Match:** Match changed file extensions to skill file patterns
3. **No Match:** Return warning: "No available reviewer found for domain [X]"
---
## Output
Present findings as:
```
## Domain Detection
**Branch:** [branch-name]
**Detected Domain:** [domain-name]
**Topology:** [stream-aligned | platform | enabling | complicated-subsystem]
### Reviewer Assignment
**Primary Owner:** @[github_handle] ([person_name])
**Availability:** [Available | At capacity (X/Y PRs)]
**Assignment:** [Assigned | Fallback to @backup | No available reviewer]
```
---
## Integration
This skill is invoked by:
- `push-pr.mdc` - Phase 1.2 (Find Reviewer)
- `init.mdc` - Domain context display
**Notion Databases Required:**
- Domains (keywords, codebase paths)
- Team Capabilities (person, domain, availability, max PRs)
- Skills (file patterns for fallback matching)