Skip to content

Personas Guide

Personas define how agents behave in Wave. Each persona binds an adapter to a specific role with its own permissions, system prompt, and behavior settings.

Built-in Personas

Wave ships with 30 built-in personas:

PersonaPurposePermissions
navigatorCodebase explorationRead, Glob, Grep, Bash(git log*), Bash(git status*)
philosopherArchitecture & specsRead, Write, Edit, Bash, Glob, Grep (full access)
plannerTask breakdownRead, Write, Edit, Bash, Glob, Grep (full access)
craftsmanImplementationRead, Write, Edit, Bash
implementerCode implementationRead, Write, Edit, Bash, Glob, Grep
debuggerIssue diagnosisRead, Grep, Glob, Bash(go test*), Bash(git log*), Bash(git diff*), Bash(git bisect*)
auditorSecurity reviewRead, Grep, Bash(go vet*), Bash(npm audit*)
reviewerCode reviewRead, Glob, Grep, Bash(go test*), Bash(npm test*)
researcherResearch & analysisRead, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch
summarizerContext compactionRead, Write, Edit, Bash, Glob, Grep (full access)
supervisorWork quality reviewRead, Glob, Grep, Bash(git *), Bash(go test*)
validatorSkeptical verification against sourceRead, Glob, Grep, Bash(wc *), Bash(git log*)
synthesizerStructured synthesis into JSON proposalsRead, Write, Edit, Bash, Glob, Grep (full access)
provocateurDivergent thinking & complexity huntingRead, Glob, Grep, Bash(wc *), Bash(git log*)
github-analystGitHub issue analysisRead, Bash(gh issue*), Bash(gh pr*), Bash(git log*)
github-enhancerGitHub issue enhancementRead, Bash(gh issue edit*)
github-commenterGitHub commentingRead, Bash(gh issue comment*), Bash(gh pr*), Bash(git push*)
github-scoperGitHub epic scopingRead, Bash(gh issue create*), Bash(gh issue view*)
gitlab-analystGitLab issue analysisRead, Bash(glab issue*), Bash(glab mr*)
gitlab-enhancerGitLab issue enhancementRead, Bash(glab issue edit*)
gitlab-commenterGitLab commentingRead, Bash(glab issue note*), Bash(glab mr*)
gitlab-scoperGitLab epic scopingRead, Bash(glab issue create*)
gitea-analystGitea issue analysisRead, Bash(tea issues*), Bash(tea pulls*)
gitea-enhancerGitea issue enhancementRead, Bash(tea issues edit*)
gitea-commenterGitea commentingRead, Bash(tea issues comment*), Bash(tea pulls*)
gitea-scoperGitea epic scopingRead, Bash(tea issues create*)
bitbucket-analystBitbucket issue analysisRead, Bash(curl -s*), Bash(jq *), Bash(git log*)
bitbucket-enhancerBitbucket issue enhancementRead, Bash(curl *), Bash(jq *)
bitbucket-commenterBitbucket commentingRead, Bash(curl *), Bash(git push*)
bitbucket-scoperBitbucket epic scopingRead, Bash(curl *), Bash(jq *)

Persona Definitions

Read-only codebase exploration. Finds files, analyzes patterns, maps architecture.

yaml
navigator:
  adapter: claude
  description: "Read-only codebase exploration and analysis"
  system_prompt_file: .wave/personas/navigator.md
  #temperature: 0.3
  permissions:
    allowed_tools:
      - Read
      - Glob
      - Grep
      - "Bash(git log*)"
      - "Bash(git status*)"
    deny:
      - "Write(*)"
      - "Edit(*)"
      - "Bash(git commit*)"
      - "Bash(git push*)"

Philosopher

Design and specification. Creates specs, plans, and contracts.

yaml
philosopher:
  adapter: claude
  description: "Architecture design and specification"
  system_prompt_file: .wave/personas/philosopher.md
  #temperature: 0.7
  permissions:
    allowed_tools:
      - Read
      - Write
      - Edit
      - Bash
      - Glob
      - Grep
    deny: []

Planner

Task breakdown and project planning. Decomposes features into actionable steps.

yaml
planner:
  adapter: claude
  description: "Task breakdown and project planning"
  system_prompt_file: .wave/personas/planner.md
  #temperature: 0.3
  permissions:
    allowed_tools:
      - Read
      - Write
      - Edit
      - Bash
      - Glob
      - Grep
    deny: []

Craftsman

Full implementation capability. Reads, writes, edits, and runs commands.

yaml
craftsman:
  adapter: claude
  description: "Code implementation and testing"
  system_prompt_file: .wave/personas/craftsman.md
  #temperature: 0.3
  permissions:
    allowed_tools:
      - Read
      - Write
      - Edit
      - Bash
    deny:
      - "Bash(rm -rf /*)"

Debugger

Systematic issue diagnosis with hypothesis testing and root cause analysis.

yaml
debugger:
  adapter: claude
  description: "Systematic issue diagnosis and root cause analysis"
  system_prompt_file: .wave/personas/debugger.md
  #temperature: 0.2
  permissions:
    allowed_tools:
      - Read
      - Grep
      - Glob
      - "Bash(go test*)"
      - "Bash(git log*)"
      - "Bash(git diff*)"
      - "Bash(git bisect*)"
    deny:
      - "Write(*)"
      - "Edit(*)"

Auditor

Security review and quality assurance. Read-only with analysis tools.

yaml
auditor:
  adapter: claude
  description: "Security review and quality assurance"
  system_prompt_file: .wave/personas/auditor.md
  #temperature: 0.1
  permissions:
    allowed_tools:
      - Read
      - Grep
      - "Bash(go vet*)"
      - "Bash(npm audit*)"
    deny:
      - "Write(*)"
      - "Edit(*)"

Summarizer

Context compaction for relay handoffs. Creates structured checkpoints.

yaml
summarizer:
  adapter: claude
  description: "Context compaction for relay handoffs"
  system_prompt_file: .wave/personas/summarizer.md
  #temperature: 0.2
  permissions:
    allowed_tools:
      - Read
      - Write
      - Edit
      - Bash
      - Glob
      - Grep
    deny: []

Implementer

Code implementation with full read/write access. Similar to craftsman but focused on spec-driven implementation.

Reviewer

Code review specialist. Read-only analysis with detailed feedback on quality, patterns, and improvements.

Researcher

Research and analysis agent. Explores codebases and external sources to gather information for decision-making.

GitHub Analyst

Analyzes GitHub issues for completeness, categorization, and priority assessment.

GitHub Enhancer

Enhances poorly documented GitHub issues with structured details, reproduction steps, and acceptance criteria.

GitHub Commenter

Posts analysis results and recommendations as comments on GitHub issues.

GitHub Scoper

Analyzes epic/umbrella issues and decomposes them into well-scoped child issues for implementation.

Defining Custom Personas

Add to the personas section of wave.yaml:

yaml
personas:
  my-persona:
    adapter: claude
    description: "What this persona does"
    system_prompt_file: .wave/personas/my-persona.md
    #temperature: 0.5  # Optional — uncomment and adjust if needed
    permissions:
      allowed_tools: [...]
      deny: [...]
FieldRequiredDescription
adapteryesReferences a key in adapters
system_prompt_fileyesPath to system prompt markdown
descriptionnoHuman-readable purpose
temperaturenoLLM temperature (0.0-1.0). Optional — commented out by default in wave.yaml
permissionsnoTool access control
hooksnoPre/post tool hooks

Temperature Guidelines

RangeUse Case
0.0-0.2Deterministic: summarization, auditing, analysis
0.3-0.5Balanced: specification, planning
0.6-0.8Creative: implementation, generation

Permissions System

Permissions use two lists:

  • allowed_tools — permitted operations
  • deny — blocked operations (always takes precedence)
yaml
permissions:
  allowed_tools:
    - "Read"              # All Read operations
    - "Write(src/*)"      # Write only in src/
    - "Bash(git *)"       # Git commands only
  deny:
    - "Bash(rm -rf *)"    # Block destructive commands

Evaluation order:

  1. Check deny → MATCH = blocked
  2. Check allowed_tools → MATCH = permitted
  3. No match → blocked (implicit deny)

Hooks

Hooks execute shell commands at tool call boundaries:

yaml
hooks:
  PreToolUse:    # Non-zero exit blocks the tool call
    - matcher: "Bash(git commit*)"
      command: ".wave/hooks/pre-commit-lint.sh"
  PostToolUse:   # Informational only
    - matcher: "Write(src/**)"
      command: "npm test --silent"

System Prompt Files

Store prompts in .wave/personas/ as markdown:

markdown
# Navigator

You are a codebase navigator. Explore and analyze without modifications.

## Responsibilities
- Map file structure and dependencies
- Identify relevant code for tasks
- Report architectural patterns

## Output Format
Provide structured JSON analysis with file paths.

## Constraints
- NEVER write, edit, or delete files
- NEVER run destructive commands

CLI Command Security

When writing persona prompts that instruct agents to use CLI tools (gh, tea, glab, curl), follow these rules to prevent shell injection from untrusted content such as issue titles, PR bodies, and user comments:

  • Always use --body-file instead of inline --body "$content". Write content to a temp file first, then pass the file path to the CLI.
  • Always use single-quoted heredoc delimiters (<<'EOF') when heredocs are necessary. An unquoted <<EOF allows shell expansion of $(), backticks, and variables inside the heredoc body.
  • Never interpolate untrusted strings directly into --title, --body, or other arguments inside double quotes.

See Secure CLI Patterns for detailed examples and platform-specific guidance for GitHub, GitLab, Gitea, and Bitbucket.

Testing Personas

bash
wave list personas              # List all personas
wave validate --verbose         # Validate configuration
wave do "analyze this" --persona navigator  # Test with task

Released under the MIT License.