Skip to main content
DevDaily supports both GitHub PR templates and custom AI prompt files to generate consistent, team-specific pull request descriptions.

Overview

DevDaily uses two mechanisms to customize PR descriptions:
  1. PR Templates: GitHub-style markdown templates with sections and checklists
  2. Prompt Files: Custom guidelines that instruct the AI how to write descriptions
These work together: the template provides structure, and the prompt file guides the AIโ€™s tone and content.

PR Template Detection

DevDaily automatically searches for PR templates in your repository:
.github/PULL_REQUEST_TEMPLATE.md
.github/pull_request_template.md
.github/PULL_REQUEST_TEMPLATE/default.md
docs/PULL_REQUEST_TEMPLATE.md
PULL_REQUEST_TEMPLATE.md
pull_request_template.md
The first template found is used to structure the PR description.

Example Template

# Pull Request Title

## What Changed

<!-- Describe the changes in this PR -->

## Why

<!-- Business or technical reason for these changes -->

## Type of Change

- [ ] ๐Ÿ› Bug fix (non-breaking change which fixes an issue)
- [ ] โœจ New feature (non-breaking change which adds functionality)
- [ ] ๐Ÿ’ฅ Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] ๐Ÿ“ Documentation update
- [ ] ๐Ÿ”ง Configuration change

## Ticket

**Ticket No:** 
**Ticket link:** 

## Impact

<!-- What parts of the system does this affect? -->

## How to Test

1. <!-- Testing step 1 -->
2. <!-- Testing step 2 -->

## Breaking Changes

<!-- List any breaking changes or "None" -->

## Screenshots

<!-- Add screenshots if applicable, or delete this section -->

## Checklist

- [ ] My code follows the project's style guidelines
- [ ] I have performed a self-review of my code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix/feature works
- [ ] New and existing unit tests pass locally with my changes

Template Sections

DevDaily parses templates into sections based on ## headings and automatically fills them:
description
section
Matches: Description, What Changed, What, SummaryFilled with: AI-generated summary of changes from commits and diff
type_of_change
section
Matches: Type of Change, Type, Change TypeFilled with: Detected change type with appropriate checklist item marked
ticket
section
Matches: Ticket, Jira Ticket, Issue, Related IssuesFilled with: Ticket ID(s) and links from branch name and commits
impact
section
Matches: Impact, Affected Areas, ScopeFilled with: Analysis of which system components are affected
testing
section
Matches: How to Test, Testing, Test PlanFilled with: Step-by-step testing instructions
breaking_changes
section
Matches: Breaking Changes, Breaking, MigrationFilled with: List of breaking changes or โ€œNo breaking changes.โ€
screenshots
section
Matches: Screenshots, Images, Visual ChangesFilled with: Placeholder text (screenshots must be added manually)
checklist
section
Matches: Checklist, Verification, Review ChecklistFilled with: Preserved as-is from template

Custom PR Prompt Files

Prompt files instruct the AI how to write PR descriptions, ensuring consistency with your teamโ€™s style.

Creating a Prompt File

Create .devdaily-pr-prompt.md in your repository root:
.devdaily-pr-prompt.md
# PR Description Guidelines

These guidelines tell DevDaily AI how to generate PR descriptions for your team.

## Tone & Style

- Write in present tense ("Add feature" not "Added feature")
- Be concise โ€” aim for clarity over verbosity
- Use bullet points for lists of changes
- Avoid jargon unless well-known in the team
- No emojis in description body (section headers are fine)

## Description Format

- Start with a one-sentence summary of what the PR does
- Follow with bullet points of specific changes
- Group related changes together
- Mention any architectural decisions or trade-offs

## Ticket References

- Always include ticket IDs (e.g., PROJ-123) when available
- Link to the ticket URL
- Explain how changes relate to acceptance criteria

## Testing Instructions

- Provide step-by-step instructions for reviewers
- Include any required environment setup
- Mention edge cases to verify
- For bug fixes: expected vs actual behavior

## Breaking Changes

- Clearly call out any breaking changes
- Explain migration steps if applicable
- Tag breaking changes with โš ๏ธ

## What NOT to Include

- Don't list every file changed (that's in the diff)
- Don't repeat commit messages verbatim
- Don't include implementation details obvious from code
- Don't include TODOs โ€” create follow-up tickets instead

Search Order

DevDaily searches for prompt files in this order:
  1. Path specified in config (pr.promptFile)
  2. .devdaily-pr-prompt.md (repo root)
  3. .github/devdaily-pr-prompt.md
  4. .github/PR_DESCRIPTION_PROMPT.md
  5. docs/devdaily-pr-prompt.md

Configuration

.devdaily.json
{
  "pr": {
    "promptFile": ".github/devdaily-pr-prompt.md",
    "includeDiff": true,
    "maxDiffLines": 200
  }
}
pr.promptFile
string
Path to custom prompt file (relative to repo root or absolute)
pr.includeDiff
boolean
default:"true"
Include diff summary in AI prompt for richer context
pr.maxDiffLines
number
default:"200"
Maximum diff lines to include in prompt (prevents token overflow)

PR Configuration Options

All PR-related settings in .devdaily.json:
.devdaily.json
{
  "pr": {
    "defaultBase": "main",
    "template": null,
    "promptFile": ".devdaily-pr-prompt.md",
    "autoLabels": true,
    "defaultLabels": ["enhancement"],
    "defaultReviewers": ["alice", "bob"],
    "defaultAssignees": ["@me"],
    "titleFormat": "conventional",
    "includeTicketInTitle": true,
    "includeDiff": true,
    "maxDiffLines": 200
  }
}
pr.defaultBase
string
default:"main"
Default base branch for PRs
pr.template
string
Path to custom PR template (overrides auto-detection)
pr.autoLabels
boolean
default:"true"
Automatically suggest labels based on changes
pr.defaultLabels
string[]
default:"[]"
Labels to apply to all PRs
pr.defaultReviewers
string[]
default:"[]"
Default reviewers (GitHub usernames)
pr.defaultAssignees
string[]
default:"[]"
Default assignees (@me = you, or GitHub usernames)
pr.titleFormat
enum
default:"conventional"
PR title format:
  • conventional: feat: Add OAuth (Conventional Commits)
  • ticket-first: PROJ-123: Add OAuth
  • plain: Add OAuth
pr.includeTicketInTitle
boolean
default:"true"
Include ticket ID in PR title (when detected)

How Templates Are Filled

When you run devdaily pr, hereโ€™s what happens:
1

Detect template

Search for PR template in standard locations
2

Load prompt file

Load custom prompt guidelines (if exists)
3

Analyze changes

  • Get commits since base branch
  • Generate diff summary
  • Extract ticket IDs from branch/commits
  • Fetch ticket metadata (if PM tool configured)
4

Generate with AI

Send context + prompt to GitHub Copilot CLI:
  • Commits and file changes
  • Diff summary (up to maxDiffLines)
  • Ticket data
  • Template structure
  • Custom guidelines from prompt file
5

Fill template

Map AI output to template sections:
  • Description โ†’ What Changed
  • Type detection โ†’ Type of Change checkboxes
  • Tickets โ†’ Ticket section with links
  • Testing steps โ†’ How to Test
6

Present to user

Show filled template in interactive menu:
  • Edit description
  • Create PR
  • Copy to clipboard

Type Detection

DevDaily automatically detects PR type from:
  1. Branch name prefix:
    • feature/, feat/ โ†’ Feature
    • fix/, bugfix/ โ†’ Bug fix
    • hotfix/ โ†’ Hotfix
    • docs/ โ†’ Documentation
    • refactor/ โ†’ Refactoring
    • test/ โ†’ Testing
    • chore/ โ†’ Maintenance
  2. Conventional commit types:
    • feat: โ†’ Feature
    • fix: โ†’ Bug fix
    • docs: โ†’ Documentation
    • refactor: โ†’ Refactoring
    • test: โ†’ Testing
    • chore: โ†’ Maintenance
  3. File changes:
    • Only .md files โ†’ Documentation
    • Only test files โ†’ Testing
    • Config files โ†’ Configuration
The detected type determines which checkbox is marked in โ€œType of Changeโ€ sections.

Example: Complete Workflow

1. Create Files

## What Changed

## Type of Change

- [ ] ๐Ÿ› Bug fix
- [ ] โœจ Feature
- [ ] ๐Ÿ“ Docs

## Ticket

**Ticket No:** 
**Ticket link:** 

## Testing

## Checklist

- [ ] Tests pass
- [ ] Docs updated

2. Create Branch

git checkout -b feature/PROJ-123-oauth

3. Make Changes

# Implement OAuth
git add src/auth/oauth.ts
git commit -m "feat(auth): Add OAuth provider"

git add src/auth/google.ts
git commit -m "feat(auth): Add Google OAuth integration"

git add tests/auth.test.ts
git commit -m "test(auth): Add OAuth tests"

4. Generate PR

devdaily pr

5. Output

Title:
feat(auth): PROJ-123 Add OAuth provider
Body:
## What Changed

Adds OAuth2 authentication support with Google as the first provider. This allows users to sign in using their Google accounts instead of email/password.

Changes:
- Implement OAuth2 base provider class
- Add Google OAuth integration
- Update user model to support OAuth accounts
- Add comprehensive test coverage

## Type of Change

- [ ] ๐Ÿ› Bug fix
- [x] โœจ Feature
- [ ] ๐Ÿ“ Docs

## Ticket

**Ticket No:** PROJ-123
**Ticket link:** https://yourcompany.atlassian.net/browse/PROJ-123

## Testing

1. Set up Google OAuth credentials in `.env`:
GOOGLE_CLIENT_ID=your-client-id GOOGLE_CLIENT_SECRET=your-client-secret
2. Start the dev server: `npm run dev`
3. Navigate to `/login`
4. Click "Sign in with Google"
5. Verify redirect to Google consent screen
6. After approval, verify redirect back to app
7. Verify user is logged in with Google account details

## Checklist

- [x] Tests pass
- [x] Docs updated

6. Create PR

From the interactive menu:
  • Select โ€œCreate PR on GitHubโ€
  • DevDaily creates PR with:
    • Generated title and body
    • Label: enhancement (auto-detected)
    • Reviewer: alice (from config)
    • Assignee: @me

Generating Sample Files

DevDaily can generate starter templates:
# Generate sample PR template
devdaily init --pr-template
# Creates .github/PULL_REQUEST_TEMPLATE.md

# Generate sample prompt file
devdaily init --pr-prompt
# Creates .devdaily-pr-prompt.md

Best Practices

1

Start with a simple template

Donโ€™t over-engineer. Start with:
  • Description
  • Testing
  • Checklist
Add sections as needs evolve.
2

Write clear prompt guidelines

Be specific about:
  • Tone (formal vs casual)
  • Length (concise vs detailed)
  • Required elements (tickets, testing, etc.)
  • Forbidden elements (emojis, personal opinions)
3

Use conventional commit types

Consistent commit types (feat:, fix:, etc.) help DevDaily:
  • Detect PR type accurately
  • Generate better titles
  • Suggest appropriate labels
4

Review and refine

After generating several PRs:
  • Review quality of descriptions
  • Update prompt file based on patterns
  • Adjust template sections to match team needs

Troubleshooting

Template Not Detected

  1. Check file exists:
    ls -la .github/PULL_REQUEST_TEMPLATE.md
    
  2. Verify file is readable:
    cat .github/PULL_REQUEST_TEMPLATE.md
    
  3. Manually specify:
    { "pr": { "template": ".github/PULL_REQUEST_TEMPLATE.md" } }
    

Prompt File Not Applied

  1. Check file location:
    ls -la .devdaily-pr-prompt.md
    
  2. Test with debug:
    devdaily pr --debug
    # Shows: "Loaded PR prompt from: ..."
    
  3. Verify syntax:
    # Must use ## headings for sections
    grep "^##" .devdaily-pr-prompt.md
    

Sections Not Filled Correctly

  1. Check section names: Must match expected patterns (case-insensitive)
    ## Description  โœ…
    ## What Changed โœ…
    ## Changes      โŒ (not recognized)
    
  2. Verify markdown format: Sections must use ## (h2)
    ## Testing     โœ…
    ### Testing    โŒ (h3, not h2)
    # Testing      โŒ (h1, not h2)
    
  3. Check for typos:
    ## Descripion  โŒ (typo)
    ## Description โœ…
    

Configuration Overview

Learn about all configuration options

Project Management

Configure ticket integration for PRs

PR Command

Learn how to create PRs with DevDaily

Build docs developers (and LLMs) love