--- name: codebase-fix-and-pr description: Apply code changes to a GitHub repository and automatically create a pull request. Takes user feedback or fix requirements, clones the repo, makes localized changes, commits to a new branch, and opens a PR via GitHub MCP. compatibility: Requires git, GitHub authentication via PAT environment variable, and network access to GitHub license: MIT --- # Codebase Fix and Pull Request ## When to use this skill Use this skill when you need to apply code fixes or improvements to a GitHub repository and automatically create a pull request. Specifically, use it when you need to: - Fix bugs reported by users or found through code review - Implement feature improvements - Apply refactoring changes - Fix documentation or configuration - Apply automated code corrections - Update dependencies or package versions ## Overview This skill guides an agent through the complete workflow of analyzing user feedback, making targeted code changes, and creating a pull request. The agent uses GitHub authentication via environment variables and the GitHub MCP tools to complete the entire flow. ## Prerequisites Before using this skill: 1. **Configure Git CLI**: Use the `configure-git-cli` skill to set up git user identity and GitHub authentication with your PAT 2. **Required environment variables**: - `GITHUB_EMAIL`: Your git email - `GITHUB_NAME`: Your git name - `GITHUB_PAT`: GitHub Personal Access Token with repo and workflow scopes ## Workflow ### Step 0: Configure Git (Prerequisite) Before performing any git operations, ensure git is configured by invoking the `configure-git-cli` skill. This will: - Set your git user email and name - Configure GitHub authentication with your PAT - Verify git credentials work correctly Once configured, you can proceed with the following steps. ### Step 1: Parse Requirements **Input required:** - GitHub repository URL or `owner/repo` format - User feedback, issue description, or fix requirement - Specific files or areas to modify (optional) - PR description and title (optional - will auto-generate if not provided) **Actions:** 1. Parse the user feedback to understand: - What needs to be fixed - Why it needs to be fixed - Which files are likely affected - Success criteria for the fix 2. Break down complex requests into discrete changes 3. Plan the implementation approach ### Step 2: Repository Setup **Actions:** 1. Git is already configured from Step 0, so authentication is ready 2. Clone the repository: ```bash git clone https://github.com/owner/repo.git cd repo ``` 3. Verify repository structure and identify relevant files 4. Document the current state before making changes ### Step 3: Create Feature Branch **Actions:** 1. Create a new branch with a descriptive name: ```bash git checkout -b fix/description-of-change # or git checkout -b feature/description-of-change ``` 2. Branch naming conventions: - Use `fix/` prefix for bug fixes - Use `feature/` prefix for new features or improvements - Use `refactor/` prefix for refactoring work - Use `docs/` prefix for documentation updates - Use kebab-case for the description 3. Verify the branch was created successfully ### Step 4: Analyze and Make Changes **For each required change:** 1. **Locate the relevant file(s)** - Read the file(s) that need modification - Understand the current code structure - Identify dependencies and imports 2. **Make targeted changes** - Modify only what's necessary to fix the issue - Maintain code style consistency - Keep changes focused and atomic - Update related tests if applicable 3. **Verify changes** - Check for syntax errors - Verify the change achieves the stated goal - Ensure no unrelated code was modified **Common change patterns:** - Bug fixes (modify logic) - Configuration updates (modify config files) - Documentation (update README, comments, docs) - Dependency updates (modify package.json, requirements.txt) - Test additions (new test files) - Code refactoring (improve structure) ### Step 5: Commit Changes **Actions:** 1. Stage the changes: ```bash git add . # or for specific files: git add path/to/file1 path/to/file2 ``` 2. Create a meaningful commit message: - Use conventional commit format (recommended) - First line: summary (50 characters max) - Blank line - Body: detailed explanation (optional) - Reference issue numbers if applicable **Commit message examples:** ``` fix: resolve authentication timeout in user service When a user login attempt exceeded 30 seconds, the timeout handler was not properly cleaning up resources. This caused the subsequent requests to fail. Now using a WeakMap to track in-flight requests and properly clean up on timeout. Fixes #123 ``` ``` feat: add retry logic to API client calls Adds exponential backoff retry strategy for transient API failures. Configurable retry count and backoff multiplier. ``` ``` docs: update installation instructions for macOS ``` ### Step 6: Push to Remote Branch **Actions:** 1. Push the branch to the remote repository: ```bash git push origin fix/description-of-change ``` 2. Verify the push was successful 3. Note the branch name for PR creation ### Step 7: Create Pull Request via GitHub MCP **Using the GitHub MCP authenticated tools:** 1. Call the GitHub MCP to create a pull request with: - **Title**: Clear, descriptive title (auto-generated or provided) - **Description**: What was changed and why - **Head**: The feature branch name - **Base**: The target branch (usually `main` or `develop`) 2. **PR Description template:** ``` ## What changed Brief summary of the changes ## Why Explanation of the motivation for these changes ## How to test Steps to verify the fix works correctly ## Related issues Fixes #123 Closes #456 ``` 3. **PR creation example:** - Title: "Fix authentication timeout in user service" - Base branch: "main" - Head branch: "fix/auth-timeout" - Description: Includes what changed, why, testing steps ### Step 8: Verify PR Creation **Actions:** 1. Confirm the PR was created successfully 2. Verify: - All changes are visible in the PR diff - Commit history is clean - No unrelated files were modified - PR description is clear 3. Provide the PR URL and summary to the user ## Common Patterns ### Bug Fix Pattern ``` 1. Identify the bug in the code 2. Understand the root cause 3. Fix the specific issue (usually 1-2 files) 4. Create test case if not present 5. Commit with "fix:" prefix 6. Create PR with issue reference ``` ### Feature Addition Pattern ``` 1. Identify where to add the feature 2. Implement the feature 3. Add tests for the feature 4. Update documentation if needed 5. Commit with "feat:" prefix 6. Create PR with feature description ``` ### Documentation Update Pattern ``` 1. Identify documentation that needs updating 2. Update markdown or comment documentation 3. Fix any broken links 4. Commit with "docs:" prefix 5. Create PR with summary of changes ``` ### Dependency Update Pattern ``` 1. Update version in package.json or requirements.txt 2. Run dependency installation/update 3. Test that the code works with new version 4. Commit with "chore:" or "deps:" prefix 5. Create PR documenting version changes ``` ## Error Handling **If repository clone fails:** - Verify the PAT has repo access permissions - Check that the repository URL is correct - Ensure network connectivity **If branch creation fails:** - Check if the branch already exists - Verify you're in the correct repository directory - Ensure git is properly configured **If commit fails:** - Verify files exist and have correct changes - Check for merge conflicts (if pulling latest) - Ensure file permissions are correct **If PR creation fails:** - Verify the branch has been pushed successfully - Check that the base branch exists - Ensure the GitHub PAT has PR creation permissions - Verify no branch protection rules are blocking ## GitHub MCP Integration The skill uses the GitHub MCP tools which are pre-authenticated with the GitHub PAT: **Available operations:** - `create_pull_request`: Create a new PR - Git operations via command line using configured credentials - Repository metadata access **Environment variables required:** - `GITHUB_PAT`: GitHub Personal Access Token with repo and pull-request scopes - (Git is configured via the `configure-git-cli` skill) ## Best Practices 1. **Make atomic commits**: Each commit should represent one logical change 2. **Keep PRs focused**: Fix one issue or implement one feature per PR 3. **Write clear messages**: Future developers will read your commits 4. **Test locally first**: Verify changes work before pushing 5. **Reference issues**: Link to related issues in commit and PR descriptions 6. **Describe the "why"**: Explain motivation, not just what changed 7. **Keep changes minimal**: Don't refactor unrelated code ## Example Use Cases ### Bug Fix Example **User feedback:** "The login button doesn't work on mobile devices" **Agent process:** 1. Parse the issue: Mobile login failure 2. Clone repository 3. Create branch: `fix/mobile-login-button` 4. Locate login component 5. Debug and fix responsive design issue 6. Test the fix 7. Commit: "fix: correct mobile login button styling" 8. Push branch 9. Create PR: "Fix login button on mobile devices" ### Feature Addition Example **User feedback:** "Add dark mode support to the application" **Agent process:** 1. Parse the requirement: Implement dark mode 2. Clone repository 3. Create branch: `feature/dark-mode-support` 4. Implement theme switching logic 5. Update components to support theme 6. Add configuration option 7. Create tests for theme switching 8. Commit: "feat: add dark mode theme support" 9. Push branch 10. Create PR: "Add dark mode support with theme switcher" ### Documentation Update Example **User feedback:** "The API documentation is outdated" **Agent process:** 1. Parse the requirement: Update API docs 2. Clone repository 3. Create branch: `docs/update-api-documentation` 4. Locate and update README or docs folder 5. Fix outdated examples 6. Update endpoint descriptions 7. Commit: "docs: update API documentation examples" 8. Push branch 9. Create PR: "Update API documentation with current endpoints" ## Success Criteria The workflow is complete when: - ✅ Repository successfully cloned - ✅ Feature branch created with descriptive name - ✅ All required changes made to files - ✅ Changes are focused and atomic - ✅ Commit message is clear and follows conventions - ✅ Changes pushed to remote - ✅ Pull request created successfully - ✅ PR includes clear description and issue references - ✅ User provided with PR link and summary