---
name: omp-roles
description: "Use this skill whenever you need the allowed_tools / skills preset for a sub-agent role before calling spawn_subagent. Trigger especially when user mentions: \"role\", \"spawn_subagent\", \"allowed_tools\", or any OMP role name (executor, architect, analyst, critic, security-reviewer, code-reviewer, qa-tester, planner, explore, debugger, verifier). Also use when a /ultrawork, /ralph, /autopilot, /ultraqa, or /team workflow step asks for role tool/skill configuration."
metadata:
  builtin_skill_version: "0.1.1"
  qwenpaw:
    requires: {}
---

# OMP Role Tool Configuration

When using spawn_subagent (single or batch mode) to dispatch sub-agents,
set the corresponding allowed_tools and skills parameters based on the
sub-agent's role.

**Canonical source of truth in code:**
`plugins/bundle/omp_workflows/shared/constants.py`
(`ROLE_ALLOWED_TOOLS`, `ROLE_SKILLS`, `TOOL_*` names) and
`shared/role_prompts.py` (`ROLE_PROMPTS`, `build_worker_prompt`,
`format_spawn_call`). Tool strings must match registered ToolRegistry
names — do not invent aliases.

## Role Definitions

### executor (Code Executor)
- **allowed_tools**: null (inherits all tools)
- **skills**: null (inherits all skills)
- **Boundary**: Implement features, run quality checks. Follow existing patterns.

### architect (System Architect)
- **allowed_tools**: ["read_file", "grep_search", "glob_search",
  "write_file", "ast_search", "execute_shell_command"]
- **skills**: []
- **Boundary**: Design interfaces and module boundaries, diagnose complex issues. No implementation code.

### analyst (Requirements Analyst)
- **allowed_tools**: ["read_file", "grep_search", "glob_search",
  "write_file", "execute_shell_command"]
- **skills**: []
- **Boundary**: Extract requirements, identify constraints, define acceptance criteria. No code.

### critic (Plan/Design Critic)
- **allowed_tools**: ["read_file", "grep_search", "glob_search",
  "ast_search"]
- **skills**: []
- **Boundary**: Review plans and designs, challenge assumptions. No plans, no code.

### security-reviewer (Security Reviewer)
- **allowed_tools**: ["read_file", "grep_search", "glob_search",
  "execute_shell_command", "ast_search"]
- **skills**: []
- **Boundary**: Identify vulnerabilities, injection vectors, auth weaknesses. No file modifications.

### code-reviewer (Code Reviewer)
- **allowed_tools**: ["read_file", "grep_search", "glob_search",
  "execute_shell_command", "ast_search"]
- **skills**: []
- **Boundary**: Review code quality, maintainability, convention adherence. No file modifications.

### qa-tester (QA Tester)
- **allowed_tools**: ["read_file", "grep_search", "glob_search",
  "execute_shell_command"]
- **skills**: []
- **Boundary**: Interactive CLI/service testing — start services and verify behavior.

### planner (Strategic Planner)
- **allowed_tools**: ["read_file", "grep_search", "glob_search",
  "write_file", "ast_search"]
- **skills**: []
- **Boundary**: Create implementation plans, define task breakdown and dependencies. No implementation code.

### explore (Code Explorer)
- **allowed_tools**: ["read_file", "grep_search", "glob_search",
  "ast_search"]
- **skills**: []
- **Boundary**: Read-only exploration. Map codebase structure and dependencies.

### debugger (Debugging Expert)
- **allowed_tools**: null (inherits all tools)
- **skills**: []
- **Boundary**: Root cause analysis, fix build/test failures. No new features.

### verifier (Adversarial Verifier)
- **allowed_tools**: ["read_file", "grep_search", "glob_search",
  "execute_shell_command", "ast_search"]
- **skills**: []
- **Boundary**: Verification only — no file modifications. Physical isolation via read-only tool set.

## Usage

```text
spawn_subagent(
    task="<role identity from ROLE_PROMPTS>\n\n## Task\n<task description>",
    allowed_tools=<ROLE_ALLOWED_TOOLS[role] or omit if null>,
    skills=<ROLE_SKILLS[role] or omit if null>,
    fork=True,         # if worktree isolation needed
    background=True,   # if background execution needed
)
```

When allowed_tools or skills is null, omit the parameter (uses default None).
For batch mode, pass `task=""` and put per-item role config in each batch dict.
