opposition-research.yml
Conduct automated opposition research on a competitor product, framework, or repository. Mines public community demand signals (issues, discussions, forums, feature request boards) for high-value capabilities and surfaces them as tracked issues in the repository.
Follows the Morrison-Lab /oppo skill rubric. The agent searches competitor community surfaces, filters candidate ideas against our repository’s explicit scope, verifies that issues do not duplicate existing open or closed issues, and files actionable, evidence-backed opportunity issues.
Inputs
| Input | Type | Default | Description |
|---|---|---|---|
competitor |
string | required | Competitor product, framework, package, or repository to research. |
target-repo |
string | ${{ github.repository }} |
Target repository receiving the research. |
scope-guidance |
string | '' |
Explicit scope boundaries specifying what is on-scope vs out-of-scope. |
dry-run |
boolean | false |
When true, writes findings to the step summary instead of opening issues. |
max-issues |
number | 3 |
Maximum number of opportunity issues to open in a single run. |
labels |
string | 'enhancement' |
Comma-separated labels applied to created issues. |
model |
string | '' |
Claude model to use for the research session (empty defers to default). |
use-ai-config |
boolean | true |
Install the Morrison-Lab/ai-config plugin for the opposition-research skill. |
timeout-minutes |
number | 45 |
Job timeout in minutes. |
Secrets
| Secret | Required | Description |
|---|---|---|
CLAUDE_CODE_OAUTH_TOKEN |
no | Claude Code OAuth token (Claude Max plan). |
ANTHROPIC_API_KEY |
no | Direct Anthropic API key. |
Permissions
Grant contents: read and issues: write.
Example
name: Opposition Research
on:
schedule:
- cron: '0 14 * * 1' # Weekly on Monday at 14:00 UTC
workflow_dispatch:
inputs:
competitor:
description: Competitor product or repository to research
type: string
default: 'r-lib/actions'
dry-run:
description: Run research without filing issues (output to step summary)
type: boolean
default: false
jobs:
oppo:
permissions:
contents: read
issues: write
uses: Morrison-Lab/gha/.github/workflows/opposition-research.yml@v3
secrets:
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
with:
competitor: ${{ inputs.competitor || 'r-lib/actions' }}
dry-run: ${{ inputs.dry-run || false }}
# scope-guidance: 'Specific guidance on what features are on-scope vs out-of-scope.'
# max-issues: 3
# labels: 'enhancement'
# model: 'claude-sonnet-4-5'
# use-ai-config: true
# timeout-minutes: 45See the examples/ directory for the full caller stub (opposition-research.yml).