GitHub MCP Server
This skill covers using the GitHub MCP server to interact with GitHub repositories, manage pull requests, issues, workflows, and other GitHub features programmatically.
When to Use
Use GitHub MCP tools when:
- Creating or updating pull requests
- Managing issues and labels
- Triggering GitHub Actions workflows
- Reviewing code changes
- Managing repository settings
- Querying repository data
- Automating GitHub workflows
- Syncing repository information
Note: Many GitHub MCP tools are already documented in the instructions. This skill provides additional context and usage patterns.
Available Tool Categories
The GitHub MCP server provides extensive tools (prefix: mcp_github_):
Repository Operations
mcp_github_create_repository - Create new repository
mcp_github_get_file_contents - Read repository files
mcp_github_create_or_update_file - Write files
mcp_github_delete_file - Remove files
mcp_github_push_files - Batch file operations
mcp_github_list_branches - List branches
mcp_github_create_branch - Create branch
Pull Request Management
mcp_github_create_pull_request - Create PR
mcp_github_update_pull_request - Update PR
mcp_github_list_pull_requests - List PRs
mcp_github_pull_request_read - Get PR details
mcp_github_pull_request_review_write - Create reviews
mcp_github_add_comment_to_pending_review - Add review comments
mcp_github_merge_pull_request - Merge PR
mcp_github_update_pull_request_branch - Update PR branch
Issue Management
mcp_github_issue_write - Create/update issues
mcp_github_issue_read - Get issue details
mcp_github_list_issues - List issues
mcp_github_search_issues - Search issues
mcp_github_add_issue_comment - Comment on issues
Workflow & Actions
mcp_github_list_commits - List repository commits
mcp_github_get_commit - Get commit details
mcp_github_search_code - Search code
mcp_github_search_repositories - Search repos
See the GitHub instructions in your context for complete tool documentation.
Workflow Patterns
Creating Pull Requests
Create feature branch:
mcp_github_create_branch({
owner: "JimmyPaolini",
repo: "monorepo",
branch: "feat/new-feature",
from_branch: "main",
});
Make changes:
mcp_github_push_files({
owner: "JimmyPaolini",
repo: "monorepo",
branch: "feat/new-feature",
files: [
{
path: "packages/lexico-components/src/components/NewButton.tsx",
content: buttonComponentCode,
},
{
path: "packages/lexico-components/src/index.ts",
content: updatedExports,
},
],
message: "feat(lexico-components): add new button component",
});
Create pull request:
const pr = mcp_github_create_pull_request({
owner: "JimmyPaolini",
repo: "monorepo",
title: "feat(lexico-components): add new button component",
head: "feat/new-feature",
base: "main",
body: "Adds a new button component to lexico-components.",
draft: false,
});
Code Review Workflow
Get PR details:
const prDetails = mcp_github_pull_request_read({
method: "get",
owner: "JimmyPaolini",
repo: "monorepo",
pullNumber: 42,
});
Get PR diff:
const diff = mcp_github_pull_request_read({
method: "get_diff",
owner: "JimmyPaolini",
repo: "monorepo",
pullNumber: 42,
});
Create review:
mcp_github_pull_request_review_write({
method: "create",
owner: "JimmyPaolini",
repo: "monorepo",
pullNumber: 42,
body: "Reviewing the implementation...",
event: "COMMENT", // Don't submit yet
});
Add review comments:
mcp_github_add_comment_to_pending_review({
owner: "JimmyPaolini",
repo: "monorepo",
pullNumber: 42,
path: "packages/lexico-components/src/components/NewButton.tsx",
body: "Consider adding prop validation here",
line: 15,
side: "RIGHT",
subjectType: "LINE",
});
Submit review:
mcp_github_pull_request_review_write({
method: "submit_pending",
owner: "JimmyPaolini",
repo: "monorepo",
pullNumber: 42,
body: "Looks good! Just a few minor suggestions.",
event: "APPROVE",
});
Issue Operations
Create issue:
const issue = mcp_github_issue_write({
method: "create",
owner: "JimmyPaolini",
repo: "monorepo",
title: "Add dark mode support to lexico-components",
body: "Add dark mode theming support to all components.",
labels: ["enhancement", "lexico-components"],
assignees: ["JimmyPaolini"],
});
Update issue:
mcp_github_issue_write({
method: "update",
owner: "JimmyPaolini",
repo: "monorepo",
issue_number: issue.number,
state: "closed",
state_reason: "completed",
});
Search issues:
const bugs = mcp_github_search_issues({
query: "repo:JimmyPaolini/monorepo is:issue is:open label:bug",
});
Repository File Operations
Read configuration:
const packageJson = mcp_github_get_file_contents({
owner: "JimmyPaolini",
repo: "monorepo",
path: "package.json",
});
const config = JSON.parse(atob(packageJson.content));
Update file:
// Get current file SHA
const file = mcp_github_get_file_contents({
owner: "JimmyPaolini",
repo: "monorepo",
path: "package.json",
});
// Update content
const updatedConfig = {
...JSON.parse(atob(file.content)),
version: "1.2.3",
};
// Write back
mcp_github_create_or_update_file({
owner: "JimmyPaolini",
repo: "monorepo",
path: "package.json",
content: JSON.stringify(updatedConfig, null, 2),
message: "chore(monorepo): bump version to 1.2.3",
branch: "main",
sha: file.sha,
});
Batch updates:
mcp_github_push_files({
owner: "JimmyPaolini",
repo: "monorepo",
branch: "update-docs",
files: [
{ path: "README.md", content: updatedReadme },
{ path: "CONTRIBUTING.md", content: updatedContributing },
{
path: "packages/lexico-components/README.md",
content: componentReadme,
},
],
message: "docs: update documentation across projects",
});
Project-Specific Usage
monorepo Automation
Create documentation PR:
// Create branch
mcp_github_create_branch({
owner: "JimmyPaolini",
repo: "monorepo",
branch: "docs/update-agents",
from_branch: "main",
});
// Generate updated docs
const agentsDocs = generateAgentsDocumentation();
// Push changes
mcp_github_push_files({
owner: "JimmyPaolini",
repo: "monorepo",
branch: "docs/update-agents",
files: [
{ path: "AGENTS.md", content: agentsDocs.root },
{ path: "applications/caelundas/AGENTS.md", content: agentsDocs.caelundas },
{ path: "applications/lexico/AGENTS.md", content: agentsDocs.lexico },
],
message: "docs: update AGENTS.md documentation",
});
// Create PR
mcp_github_create_pull_request({
owner: "JimmyPaolini",
repo: "monorepo",
title: "docs: update AGENTS.md documentation",
head: "docs/update-agents",
base: "main",
body: "Updates AGENTS.md files with latest architecture patterns.",
draft: false,
});
Sync with PR template:
// Get PR template
const template = mcp_github_get_file_contents({
owner: "JimmyPaolini",
repo: "monorepo",
path: ".github/PULL_REQUEST_TEMPLATE.md",
});
// Use template for PR body
const prBody = fillPRTemplate(atob(template.content), {
description: "Add new feature",
changes: ["Updated component", "Added tests"],
testing: "nx test lexico-components",
});
Issue Automation
Create issues from backlog:
const backlogItems = [
{
title: "Add pagination to search results",
labels: ["enhancement", "lexico"],
estimate: 5,
},
{
title: "Improve ephemeris calculation performance",
labels: ["performance", "caelundas"],
estimate: 8,
},
];
for (const item of backlogItems) {
mcp_github_issue_write({
method: "create",
owner: "JimmyPaolini",
repo: "monorepo",
title: item.title,
body: `Estimated effort: ${item.estimate} story points`,
labels: item.labels,
});
}
Close stale issues:
// Find old issues
const oldIssues = mcp_github_search_issues({
query: "repo:JimmyPaolini/monorepo is:issue is:open created:<2024-01-01",
});
// Close with comment
for (const issue of oldIssues.items) {
mcp_github_add_issue_comment({
owner: "JimmyPaolini",
repo: "monorepo",
issue_number: issue.number,
body: "Closing due to inactivity. Please reopen if still relevant.",
});
mcp_github_issue_write({
method: "update",
owner: "JimmyPaolini",
repo: "monorepo",
issue_number: issue.number,
state: "closed",
state_reason: "not_planned",
});
}
Advanced Patterns
Automated Release PR
// Get last release tag
const tags = mcp_github_list_tags({
owner: "JimmyPaolini",
repo: "monorepo",
});
const lastTag = tags.data[0].name;
// Get commits since last release
const commits = mcp_github_list_commits({
owner: "JimmyPaolini",
repo: "monorepo",
sha: "main",
});
// Generate changelog
const changelog = generateChangelog(commits, lastTag);
// Create release branch
const version = getNextVersion(lastTag);
mcp_github_create_branch({
owner: "JimmyPaolini",
repo: "monorepo",
branch: `release/${version}`,
from_branch: "main",
});
// Update version files
mcp_github_push_files({
owner: "JimmyPaolini",
repo: "monorepo",
branch: `release/${version}`,
files: [
{ path: "package.json", content: updatedPackageJson },
{ path: "CHANGELOG.md", content: changelog },
],
message: `chore(monorepo): release ${version}`,
});
// Create release PR
mcp_github_create_pull_request({
owner: "JimmyPaolini",
repo: "monorepo",
title: `chore(monorepo): release ${version}`,
head: `release/${version}`,
base: "main",
body: changelog,
});
Code Search & Refactoring
// Find all usages of deprecated API
const results = mcp_github_search_code({
query: "repo:JimmyPaolini/monorepo oldAPIFunction",
});
// Create refactoring PRs
for (const result of results.items) {
const file = mcp_github_get_file_contents({
owner: "JimmyPaolini",
repo: "monorepo",
path: result.path,
});
const updated = refactorCode(atob(file.content));
const branchName = `refactor/${result.path.replace(/\//g, "-")}`;
mcp_github_create_branch({
owner: "JimmyPaolini",
repo: "monorepo",
branch: branchName,
from_branch: "main",
});
mcp_github_create_or_update_file({
owner: "JimmyPaolini",
repo: "monorepo",
path: result.path,
content: updated,
message: `refactor: migrate from oldAPIFunction to newAPIFunction`,
branch: branchName,
sha: file.sha,
});
mcp_github_create_pull_request({
owner: "JimmyPaolini",
repo: "monorepo",
title: `refactor(${getScope(result.path)}): migrate to new API`,
head: branchName,
base: "main",
body: "Automated refactoring from oldAPIFunction to newAPIFunction",
});
}
Best Practices
- Use descriptive PR titles following conventional commits
- Include comprehensive PR descriptions with context and testing
- Request reviews from appropriate team members
- Label issues and PRs for organization
- Close issues with references (
Closes #123)
- Use draft PRs for work in progress
- Keep commits atomic and well-described
- Use branch protection for important branches
- Enable required reviews before merging
- Clean up merged branches automatically
Security Considerations
- Use fine-grained tokens with minimal permissions
- Never commit tokens to repository
- Use GitHub Apps for organization-wide automation
- Audit API usage regularly
- Rotate tokens periodically
- Use CODEOWNERS for sensitive files
- Enable branch protection on main branches
Troubleshooting
Permission denied:
- Verify token has required scopes
- Check repository permissions
- Ensure organization settings allow API access
File conflicts:
- Pull latest changes before updating
- Use correct SHA for file updates
- Handle merge conflicts manually
Rate limiting:
- Implement exponential backoff
- Cache responses when possible
- Use conditional requests (ETags)
Related Documentation
See Also
- github-actions skill - For workflow automation
- commit-code skill - For proper commit formatting
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: mcp-github3description: Use the GitHub MCP server for repository operations, PR management, issues, and workflows. Use this skill when working with GitHub repositories programmatically. Use when this capability is needed.4---56# GitHub MCP Server78This skill covers using the GitHub MCP server to interact with GitHub repositories, manage pull requests, issues, workflows, and other GitHub features programmatically.910## When to Use1112Use GitHub MCP tools when:1314- Creating or updating pull requests15- Managing issues and labels16- Triggering GitHub Actions workflows17- Reviewing code changes18- Managing repository settings19- Querying repository data20- Automating GitHub workflows21- Syncing repository information2223**Note:** Many GitHub MCP tools are already documented in the instructions. This skill provides additional context and usage patterns.2425## Available Tool Categories2627The GitHub MCP server provides extensive tools (prefix: `mcp_github_`):2829### Repository Operations3031- `mcp_github_create_repository` - Create new repository32- `mcp_github_get_file_contents` - Read repository files33- `mcp_github_create_or_update_file` - Write files34- `mcp_github_delete_file` - Remove files35- `mcp_github_push_files` - Batch file operations36- `mcp_github_list_branches` - List branches37- `mcp_github_create_branch` - Create branch3839### Pull Request Management4041- `mcp_github_create_pull_request` - Create PR42- `mcp_github_update_pull_request` - Update PR43- `mcp_github_list_pull_requests` - List PRs44- `mcp_github_pull_request_read` - Get PR details45- `mcp_github_pull_request_review_write` - Create reviews46- `mcp_github_add_comment_to_pending_review` - Add review comments47- `mcp_github_merge_pull_request` - Merge PR48- `mcp_github_update_pull_request_branch` - Update PR branch4950### Issue Management5152- `mcp_github_issue_write` - Create/update issues53- `mcp_github_issue_read` - Get issue details54- `mcp_github_list_issues` - List issues55- `mcp_github_search_issues` - Search issues56- `mcp_github_add_issue_comment` - Comment on issues5758### Workflow & Actions5960- `mcp_github_list_commits` - List repository commits61- `mcp_github_get_commit` - Get commit details62- `mcp_github_search_code` - Search code63- `mcp_github_search_repositories` - Search repos6465See the GitHub instructions in your context for complete tool documentation.6667## Workflow Patterns6869### Creating Pull Requests70711. **Create feature branch:**7273 ```typescript74 mcp_github_create_branch({75 owner: "JimmyPaolini",76 repo: "monorepo",77 branch: "feat/new-feature",78 from_branch: "main",79 });80 ```81822. **Make changes:**8384 ```typescript85 mcp_github_push_files({86 owner: "JimmyPaolini",87 repo: "monorepo",88 branch: "feat/new-feature",89 files: [90 {91 path: "packages/lexico-components/src/components/NewButton.tsx",92 content: buttonComponentCode,93 },94 {95 path: "packages/lexico-components/src/index.ts",96 content: updatedExports,97 },98 ],99 message: "feat(lexico-components): add new button component",100 });101 ```1021033. **Create pull request:**104105 ```typescript106 const pr = mcp_github_create_pull_request({107 owner: "JimmyPaolini",108 repo: "monorepo",109 title: "feat(lexico-components): add new button component",110 head: "feat/new-feature",111 base: "main",112 body: "Adds a new button component to lexico-components.",113 draft: false,114 });115 ```116117### Code Review Workflow1181191. **Get PR details:**120121 ```typescript122 const prDetails = mcp_github_pull_request_read({123 method: "get",124 owner: "JimmyPaolini",125 repo: "monorepo",126 pullNumber: 42,127 });128 ```1291302. **Get PR diff:**131132 ```typescript133 const diff = mcp_github_pull_request_read({134 method: "get_diff",135 owner: "JimmyPaolini",136 repo: "monorepo",137 pullNumber: 42,138 });139 ```1401413. **Create review:**142143 ```typescript144 mcp_github_pull_request_review_write({145 method: "create",146 owner: "JimmyPaolini",147 repo: "monorepo",148 pullNumber: 42,149 body: "Reviewing the implementation...",150 event: "COMMENT", // Don't submit yet151 });152 ```1531544. **Add review comments:**155156 ```typescript157 mcp_github_add_comment_to_pending_review({158 owner: "JimmyPaolini",159 repo: "monorepo",160 pullNumber: 42,161 path: "packages/lexico-components/src/components/NewButton.tsx",162 body: "Consider adding prop validation here",163 line: 15,164 side: "RIGHT",165 subjectType: "LINE",166 });167 ```1681695. **Submit review:**170171 ```typescript172 mcp_github_pull_request_review_write({173 method: "submit_pending",174 owner: "JimmyPaolini",175 repo: "monorepo",176 pullNumber: 42,177 body: "Looks good! Just a few minor suggestions.",178 event: "APPROVE",179 });180 ```181182### Issue Operations1831841. **Create issue:**185186 ```typescript187 const issue = mcp_github_issue_write({188 method: "create",189 owner: "JimmyPaolini",190 repo: "monorepo",191 title: "Add dark mode support to lexico-components",192 body: "Add dark mode theming support to all components.",193 labels: ["enhancement", "lexico-components"],194 assignees: ["JimmyPaolini"],195 });196 ```1971982. **Update issue:**199200 ```typescript201 mcp_github_issue_write({202 method: "update",203 owner: "JimmyPaolini",204 repo: "monorepo",205 issue_number: issue.number,206 state: "closed",207 state_reason: "completed",208 });209 ```2102113. **Search issues:**212213 ```typescript214 const bugs = mcp_github_search_issues({215 query: "repo:JimmyPaolini/monorepo is:issue is:open label:bug",216 });217 ```218219### Repository File Operations2202211. **Read configuration:**222223 ```typescript224 const packageJson = mcp_github_get_file_contents({225 owner: "JimmyPaolini",226 repo: "monorepo",227 path: "package.json",228 });229230 const config = JSON.parse(atob(packageJson.content));231 ```2322332. **Update file:**234235 ```typescript236 // Get current file SHA237 const file = mcp_github_get_file_contents({238 owner: "JimmyPaolini",239 repo: "monorepo",240 path: "package.json",241 });242243 // Update content244 const updatedConfig = {245 ...JSON.parse(atob(file.content)),246 version: "1.2.3",247 };248249 // Write back250 mcp_github_create_or_update_file({251 owner: "JimmyPaolini",252 repo: "monorepo",253 path: "package.json",254 content: JSON.stringify(updatedConfig, null, 2),255 message: "chore(monorepo): bump version to 1.2.3",256 branch: "main",257 sha: file.sha,258 });259 ```2602613. **Batch updates:**262263 ```typescript264 mcp_github_push_files({265 owner: "JimmyPaolini",266 repo: "monorepo",267 branch: "update-docs",268 files: [269 { path: "README.md", content: updatedReadme },270 { path: "CONTRIBUTING.md", content: updatedContributing },271 {272 path: "packages/lexico-components/README.md",273 content: componentReadme,274 },275 ],276 message: "docs: update documentation across projects",277 });278 ```279280## Project-Specific Usage281282### monorepo Automation283284**Create documentation PR:**285286```typescript287// Create branch288mcp_github_create_branch({289 owner: "JimmyPaolini",290 repo: "monorepo",291 branch: "docs/update-agents",292 from_branch: "main",293});294295// Generate updated docs296const agentsDocs = generateAgentsDocumentation();297298// Push changes299mcp_github_push_files({300 owner: "JimmyPaolini",301 repo: "monorepo",302 branch: "docs/update-agents",303 files: [304 { path: "AGENTS.md", content: agentsDocs.root },305 { path: "applications/caelundas/AGENTS.md", content: agentsDocs.caelundas },306 { path: "applications/lexico/AGENTS.md", content: agentsDocs.lexico },307 ],308 message: "docs: update AGENTS.md documentation",309});310311// Create PR312mcp_github_create_pull_request({313 owner: "JimmyPaolini",314 repo: "monorepo",315 title: "docs: update AGENTS.md documentation",316 head: "docs/update-agents",317 base: "main",318 body: "Updates AGENTS.md files with latest architecture patterns.",319 draft: false,320});321```322323**Sync with PR template:**324325```typescript326// Get PR template327const template = mcp_github_get_file_contents({328 owner: "JimmyPaolini",329 repo: "monorepo",330 path: ".github/PULL_REQUEST_TEMPLATE.md",331});332333// Use template for PR body334const prBody = fillPRTemplate(atob(template.content), {335 description: "Add new feature",336 changes: ["Updated component", "Added tests"],337 testing: "nx test lexico-components",338});339```340341### Issue Automation342343**Create issues from backlog:**344345```typescript346const backlogItems = [347 {348 title: "Add pagination to search results",349 labels: ["enhancement", "lexico"],350 estimate: 5,351 },352 {353 title: "Improve ephemeris calculation performance",354 labels: ["performance", "caelundas"],355 estimate: 8,356 },357];358359for (const item of backlogItems) {360 mcp_github_issue_write({361 method: "create",362 owner: "JimmyPaolini",363 repo: "monorepo",364 title: item.title,365 body: `Estimated effort: ${item.estimate} story points`,366 labels: item.labels,367 });368}369```370371**Close stale issues:**372373```typescript374// Find old issues375const oldIssues = mcp_github_search_issues({376 query: "repo:JimmyPaolini/monorepo is:issue is:open created:<2024-01-01",377});378379// Close with comment380for (const issue of oldIssues.items) {381 mcp_github_add_issue_comment({382 owner: "JimmyPaolini",383 repo: "monorepo",384 issue_number: issue.number,385 body: "Closing due to inactivity. Please reopen if still relevant.",386 });387388 mcp_github_issue_write({389 method: "update",390 owner: "JimmyPaolini",391 repo: "monorepo",392 issue_number: issue.number,393 state: "closed",394 state_reason: "not_planned",395 });396}397```398399## Advanced Patterns400401### Automated Release PR402403```typescript404// Get last release tag405const tags = mcp_github_list_tags({406 owner: "JimmyPaolini",407 repo: "monorepo",408});409410const lastTag = tags.data[0].name;411412// Get commits since last release413const commits = mcp_github_list_commits({414 owner: "JimmyPaolini",415 repo: "monorepo",416 sha: "main",417});418419// Generate changelog420const changelog = generateChangelog(commits, lastTag);421422// Create release branch423const version = getNextVersion(lastTag);424mcp_github_create_branch({425 owner: "JimmyPaolini",426 repo: "monorepo",427 branch: `release/${version}`,428 from_branch: "main",429});430431// Update version files432mcp_github_push_files({433 owner: "JimmyPaolini",434 repo: "monorepo",435 branch: `release/${version}`,436 files: [437 { path: "package.json", content: updatedPackageJson },438 { path: "CHANGELOG.md", content: changelog },439 ],440 message: `chore(monorepo): release ${version}`,441});442443// Create release PR444mcp_github_create_pull_request({445 owner: "JimmyPaolini",446 repo: "monorepo",447 title: `chore(monorepo): release ${version}`,448 head: `release/${version}`,449 base: "main",450 body: changelog,451});452```453454### Code Search & Refactoring455456```typescript457// Find all usages of deprecated API458const results = mcp_github_search_code({459 query: "repo:JimmyPaolini/monorepo oldAPIFunction",460});461462// Create refactoring PRs463for (const result of results.items) {464 const file = mcp_github_get_file_contents({465 owner: "JimmyPaolini",466 repo: "monorepo",467 path: result.path,468 });469470 const updated = refactorCode(atob(file.content));471472 const branchName = `refactor/${result.path.replace(/\//g, "-")}`;473474 mcp_github_create_branch({475 owner: "JimmyPaolini",476 repo: "monorepo",477 branch: branchName,478 from_branch: "main",479 });480481 mcp_github_create_or_update_file({482 owner: "JimmyPaolini",483 repo: "monorepo",484 path: result.path,485 content: updated,486 message: `refactor: migrate from oldAPIFunction to newAPIFunction`,487 branch: branchName,488 sha: file.sha,489 });490491 mcp_github_create_pull_request({492 owner: "JimmyPaolini",493 repo: "monorepo",494 title: `refactor(${getScope(result.path)}): migrate to new API`,495 head: branchName,496 base: "main",497 body: "Automated refactoring from oldAPIFunction to newAPIFunction",498 });499}500```501502## Best Practices5035041. **Use descriptive PR titles** following conventional commits5052. **Include comprehensive PR descriptions** with context and testing5063. **Request reviews** from appropriate team members5074. **Label issues and PRs** for organization5085. **Close issues with references** (`Closes #123`)5096. **Use draft PRs** for work in progress5107. **Keep commits atomic** and well-described5118. **Use branch protection** for important branches5129. **Enable required reviews** before merging51310. **Clean up merged branches** automatically514515## Security Considerations516517- **Use fine-grained tokens** with minimal permissions518- **Never commit tokens** to repository519- **Use GitHub Apps** for organization-wide automation520- **Audit API usage** regularly521- **Rotate tokens** periodically522- **Use CODEOWNERS** for sensitive files523- **Enable branch protection** on main branches524525## Troubleshooting526527**Permission denied:**528529- Verify token has required scopes530- Check repository permissions531- Ensure organization settings allow API access532533**File conflicts:**534535- Pull latest changes before updating536- Use correct SHA for file updates537- Handle merge conflicts manually538539**Rate limiting:**540541- Implement exponential backoff542- Cache responses when possible543- Use conditional requests (ETags)544545## Related Documentation546547- [CONTRIBUTING.md](../../CONTRIBUTING.md) - Contribution guidelines548- [commit-code skill](../commit-code/SKILL.md) - Commit message format549- [github-actions skill](../github-actions/SKILL.md) - CI/CD workflows550551## See Also552553- **github-actions skill** - For workflow automation554- **commit-code skill** - For proper commit formatting555556---557> Converted and distributed by [TomeVault](https://tomevault.io/claim/jimmypaolini) — claim your Tome and manage your conversions.558<!-- tomevault:4.0:skill_md:2026-04-15 -->