Thank you for your interest in contributing to GitHub Agentic Workflows! We welcome contributions from the community and are excited to work with you.
π« Traditional Pull Requests Are Not Enabled for non-Core team members: If you are not part of the core team, please do not create pull requests directly. Instead, you create detailed agentic plans in issues, discuss with the team, and a core team member will create and implement the PR for you using agents.
This document deals with the contribution process for non-Core team members.
GitHub Agentic Workflows is developed by a core team using agentic development β primarily GitHub Copilot coding agent and local coding agents. This means:
- β Core team uses agents to create and manage pull requests - via Copilot coding agent or local agents
- β Automated quality assurance - CI runs all checks on all PRs
- β Community contributes through agentic plans - you craft the plan, the core team executes it
- β Traditional pull requests from non-core members are not enabled - contribute through issues instead
This project practices what it preaches: agentic development is used to build agentic workflows. Benefits include:
- Consistency: All changes go through the same automated quality gates
- Dogfooding: We use our own tools to build our tools
- Best practices: Agents follow established patterns and guidelines automatically
- Quality plans: Encourages contributors to think through the full implementation before work begins
Before filing a contribution request, use an agent to:
- Scan the source code to identify root causes (for bugs)
- Analyze execution patterns and trace the issue
- Research similar issues and solutions
- Propose specific fixes with code examples
- Create a comprehensive plan for the changes needed
Create an issue with your detailed agentic plan:
- Describe what you want to contribute
- Include your agent's analysis and findings (for bugs)
- Explain the use case and expected behavior
- Provide a complete, step-by-step plan for the agent to follow
- Include specific implementation details and examples
- Tag with appropriate labels (see Label Guidelines)
See Reporting Issues and Feature Requests for complete guidelines.
Example agentic plan in an issue:
## Add support for custom MCP server timeout configuration
### Analysis
The current MCP server configuration lacks a timeout field, which can cause workflows to hang indefinitely when servers don't respond.
### Implementation Plan
Please implement the following changes:
1. **Update Schema** (`pkg/parser/schemas/frontmatter.json`):
- Add a `timeout` field to MCP server configuration schema
- Type: integer
- Range: 5-300 seconds
- Default: 30 seconds
2. **Update Validation** (`pkg/workflow/mcp_validation.go`):
- Add validation for timeout values between 5-300 seconds
- Use error message format: "[what's wrong]. [what's expected]. [example]"
- Example error: "timeout value 400 exceeds maximum. Expected value between 5-300 seconds. Example: timeout: 60"
3. **Add Tests** (`pkg/workflow/mcp_validation_test.go`):
- Test valid timeout values (5, 30, 300)
- Test invalid timeout values (0, 4, 301, 1000)
- Test missing timeout (should use default)
4. **Update Documentation** (`docs/src/content/docs/reference/frontmatter.md`):
- Add timeout field to MCP server configuration examples
- Explain timeout behavior and defaults
- Show example with custom timeout value
5. **Follow Guidelines**:
- Use console formatting from `pkg/console` for CLI output
- Follow error message style guide
- Run `make agent-finish` before completingOnce you've opened the issue:
- Core team reviews your plan: A core team member will look at your issue and may ask clarifying questions
- Iterate on the plan: Discuss and refine the implementation approach based on team feedback
- Plan gets approved: A core team member signals they'll pick it up
A core team member will:
- Take your agentic plan and use a coding agent (Copilot or local) to implement it
- Read relevant documentation and specifications
- Make code changes following established patterns
- Run
make agent-finishto validate changes - Create a PR and handle review feedback and adjustments
You don't create or own the PR β the core team member does, using agents as their implementation tool.
All community contributions flow through agentic plans in GitHub issues. A core team member then picks up the issue and uses a coding agent to implement it in a pull request.
- You create an issue with a detailed agentic plan describing what needs to be done
- Core team reviews your plan and may ask questions or suggest refinements
- A core team member picks it up and uses a coding agent to implement your plan
- The agent follows your instructions and handles the technical details
- Core team reviews the PR and provides feedback
- Agent iterates based on review comments until approved
- PR is merged when all checks pass and reviews are satisfied
You do not create pull requests yourself. Instead, you craft comprehensive plans that a core team member executes using agents.
When a core team member implements your plan, the coding agent they use will:
- Read specifications from
scratchpad/,skills/, and.github/instructions/ - Follow code organization patterns (see scratchpad/code-organization.md)
- Implement validation following the architecture in scratchpad/validation-architecture.md
- Use console formatting from
pkg/consolefor CLI output - Write error messages following the Error Message Style Guide
- Run all quality checks:
make agent-finish(build, test, recompile, format, lint) - Update documentation for new features
- Create tests for new functionality
Before filing an issue, use an agent to perform thorough analysis and research. This accelerates implementation and helps maintainers focus on high-quality contributions.
Bug reports submitted with minimal analysis or research are likely to be ignored.
Use an agent to analyze the source code, identify root causes, propose fixes, and research similar issues before filing a bug report.
For workflow failures, use this prompt with your agent:
Please debug this workflow failure:
https://github.com/owner/repo/actions/runs/RUN_ID
Load [https://github.com/github/gh-aw/.github/agents/agentic-workflows.agent.md and](https://github.com/github/gh-aw/blob/main/.github/agents/agentic-workflows.agent.md) investigate:
- Why the workflow failed
- What tools were missing
- How to fix the configuration
Generate an investigation report and a plan to address the issue for an agent.The agent will use gh aw or the mcp server to analyze the failure. See .github/aw/debug-agentic-workflow.md for details.
When filing issues with agentic plans:
- Bugs: Include thorough agent analysis, root cause, proposed fix, and detailed implementation plan
- Features: Explain the use case, provide examples, suggest implementation approach with step-by-step instructions
- Workflow failures: Debug with agents first, then report with analysis and remediation plan
- Implementation details: Be specific about file changes, function names, validation rules, test cases
- Complete plans: The more detailed your plan, the easier it is for the core team to execute it with an agent
- Follow Label Guidelines
- A core team member will pick up the issue and implement your plan using a coding agent
Quality of the agentic plan directly impacts implementation success. Provide comprehensive, step-by-step instructions with specific details.
Core team members and the agents they use follow these standards:
All validation errors follow the template: [what's wrong]. [what's expected]. [example]
// Agent produces error messages like this:
return fmt.Errorf("invalid time delta format: +%s. Expected format like +25h, +3d, +1w, +1mo. Example: +3d", deltaStr)The agent runs make lint-errors to verify error message quality.
The agent uses styled console functions from pkg/console:
import "github.com/github/gh-aw/pkg/console"
fmt.Println(console.FormatSuccessMessage("Operation completed"))
fmt.Println(console.FormatInfoMessage("Processing workflow..."))
fmt.Fprintln(os.Stderr, console.FormatErrorMessage(err.Error()))The agent follows these principles:
- Prefer many small files over large monolithic files
- Group by functionality, not by type
- Use descriptive names that clearly indicate purpose
- Follow established patterns from the codebase
Key Patterns the Agent Uses:
-
Create Functions Pattern - One file per GitHub entity creation
- Examples:
create_issue.go,create_pull_request.go,create_discussion.go
- Examples:
-
Engine Separation Pattern - Each engine has its own file
- Examples:
copilot_engine.go,claude_engine.go,codex_engine.go - Shared helpers in
engine_helpers.go
- Examples:
-
Focused Utilities Pattern - Self-contained feature files
- Examples:
expressions.go,strings.go,artifacts.go
- Examples:
See Code Organization Patterns for details.
The agent places validation logic appropriately:
Centralized validation (pkg/workflow/validation.go):
- Cross-cutting concerns
- Core workflow integrity
- GitHub Actions compatibility
Domain-specific validation (dedicated files):
strict_mode_validation.go- Security enforcementpip_validation.go- Python packagesnpm_validation.go- NPM packagesdocker_validation.go- Docker imagesexpression_safety.go- Expression security
See Validation Architecture for the complete decision tree.
All file operations must validate paths to prevent path traversal attacks:
Use fileutil.ValidateAbsolutePath before file operations:
import "github.com/github/gh-aw/pkg/fileutil"
// Validate path before reading/writing files
cleanPath, err := fileutil.ValidateAbsolutePath(userInputPath)
if err != nil {
return fmt.Errorf("invalid path: %w", err)
}
content, err := os.ReadFile(cleanPath)Security checks performed:
- Normalizes path using
filepath.Clean(removes.and..components) - Verifies path is absolute (blocks relative path traversal)
- Returns descriptive errors for invalid paths
When to use:
- Before
os.ReadFile,os.WriteFile,os.Stat,os.Open - Before
os.MkdirAllor other directory operations - After constructing paths with
filepath.Join - When processing user-provided file paths
This provides defense-in-depth against path traversal vulnerabilities (e.g., ../../../etc/passwd).
The agent evaluates whether changes are breaking:
- Breaking: Removing/renaming commands or flags, changing JSON output structure, altering defaults
- Non-breaking: Adding new commands/flags, adding output fields, bug fixes
For breaking changes, the agent:
- Uses
majorchangeset type - Provides migration guidance
- Documents in CHANGELOG.md
See Breaking CLI Rules for details.
All community-sourced pull requests are created and managed by core team members using coding agents:
-
Create an issue with your agentic plan:
- Open an issue describing what needs to be done in detail
- Provide a complete, step-by-step implementation plan
- Include clear context, examples, and specific technical details
- Tag appropriately using Label Guidelines
-
Core team reviews and engages:
- A core team member reviews your agentic plan
- They may ask questions, suggest changes, or refine the approach
- If the plan looks good, a core team member picks it up
-
Core team member creates and implements the PR using an agent:
- They run the plan through a coding agent (Copilot or local)
- The agent reads specifications and guidelines
- The agent makes changes following established patterns
- The agent runs
make agent-finishautomatically
-
Automated quality checks:
- CI runs on all PRs
- All checks must pass (build, test, lint, recompile)
- The core team member addresses any CI failures
-
Review and iterate:
- Core team reviews the PR
- Provide feedback as comments
- Agent-assisted revisions are made as needed
- Once approved, PR is merged
Remember: As a community contributor, you don't create the PR yourself. You create an issue with a detailed plan, discuss it with the team, and a core team member creates the PR using agents.
Every agent-created PR automatically runs:
make build- Ensures Go code compilesmake test- Runs all unit and integration testsmake lint- Checks code quality and stylemake recompile- Recompiles all workflows to ensure compatibilitymake fmt- Formats Go codemake lint-errors- Validates error message quality
This structure is useful context when writing your agentic plan, so the core team's agent can navigate the codebase effectively:
/
βββ cmd/gh-aw/ # Main CLI application
βββ pkg/ # Core Go packages
β βββ cli/ # CLI command implementations
β βββ console/ # Console formatting utilities
β βββ parser/ # Markdown frontmatter parsing
β βββ workflow/ # Workflow compilation and processing
βββ scratchpad/ # Technical specifications the agent reads
βββ skills/ # Specialized knowledge for agents
βββ .github/ # Instructions and sample workflows
β βββ instructions/ # Agent instructions
β βββ workflows/ # Sample workflows and CI
βββ Makefile # Build automation (agent uses this)
This project uses an MIT license and only accepts dependencies with compatible licenses.
The following open-source licenses are compatible with our MIT license:
- MIT - Most permissive, allows reuse with minimal restrictions
- Apache-2.0 - Permissive license with patent grant
- BSD-2-Clause, BSD-3-Clause - Simple permissive licenses
- ISC - Simplified permissive license similar to MIT
The following licenses are not allowed as they conflict with our MIT license or impose unacceptable restrictions:
- GPL, LGPL, AGPL - Copyleft licenses that would force us to release under GPL
- SSPL - Server Side Public License with restrictive requirements
- Proprietary/Commercial - Closed-source licenses requiring payment or special terms
GitHub Copilot Agent automatically checks licenses when adding dependencies. However, if you're evaluating a dependency:
- Check its license: Run
make license-checkafter adding the dependency - Review the report: Run
make license-reportto generate a CSV of all licenses - If unsure: Ask in your PR - maintainers will help evaluate edge cases
The project includes automated license compliance checking:
- CI Workflow:
.github/workflows/license-check.ymlruns on every PR that changesgo.mod - Local Check: Run
make license-checkto verify all dependencies (installsgo-licenseson-demand) - License Report: Run
make license-reportto see detailed license information
All dependencies are automatically scanned using Google's go-licenses tool in CI, which classifies licenses by type and identifies potential compliance issues. Note that go-licenses is not actively maintained, so we install it on-demand rather than as a regular build dependency.
This project uses GitHub Dependabot to automatically keep dependencies up-to-date with weekly security patches and version updates.
Dependabot is configured in .github/dependabot.yml to monitor:
- Go modules (
/go.mod) - Weekly updates for Go dependencies - npm packages - Weekly updates for:
- Documentation site (
/docs/package.json) - GitHub Actions setup scripts (
/actions/setup/js/package.json) - Workflow dependencies (
/.github/workflows/package.json)
- Documentation site (
- Python packages (
/.github/workflows/requirements.txt) - Weekly updates for workflow scripts
- Schedule: Dependabot checks for updates every Monday (weekly interval)
- Pull Requests: Creates automated PRs from
dependabot[bot]for:- Security vulnerabilities (immediate)
- Version updates (weekly batch)
- Limit: Maximum of 10 open PRs per ecosystem to prevent overwhelming maintainers
Dependabot PRs will:
- Have clear titles like "Bump lodash from 4.17.20 to 4.17.21 in /docs"
- Include changelog links and release notes
- Show compatibility score based on semantic versioning
- Automatically rebase when the base branch changes
If Dependabot stops creating PRs:
-
Check repository settings: Go to Settings β Security β Dependabot
- Ensure "Dependabot alerts" is enabled
- Ensure "Dependabot security updates" is enabled
- Ensure "Dependabot version updates" is enabled
-
Verify configuration: Check
.github/dependabot.ymlsyntax- Directory paths must match locations of dependency files
- Ecosystem names must be exact:
gomod,npm,pip
-
Check for rate limits: Dependabot may be rate-limited if there are too many updates
-
Manual trigger: You can manually trigger Dependabot from repository Settings β Security β Dependabot
When reviewing Dependabot PRs:
- Review the changes: Check the changelog and compatibility score
- Let CI run: Wait for all GitHub Actions checks to pass
- Test if needed: For major version updates, test locally or let the agent verify
- Merge quickly: Security updates should be merged as soon as CI passes
- Batch updates: For minor version updates, you can merge multiple PRs at once
Dependabot prioritizes security patches:
- Security vulnerabilities are updated immediately (not weekly)
- PRs are tagged with severity level (critical, high, medium, low)
- Security PRs should be reviewed and merged within 24-48 hours
For comprehensive testing guidelines including assert vs require usage, table-driven test patterns, and best practices, see scratchpad/testing.md.
Quick reference:
make test-unit- Fast unit tests (~25s)make test- Full test suite (~30s)make agent-finish- Complete validation before committing
Be nice, don't spam. The project maintainers reserve the right to clean up spam, unsolicited promotions, or off-topic content as needed to keep discussions focused and valuable for all contributors.
This includes but is not limited to:
- Repeated identical or similar comments across multiple issues or pull requests
- Unsolicited promotional content or advertisements
- Off-topic comments that don't contribute to the discussion
- Automated bot comments without prior approval
- Join the
#continuous-aichannel in the GitHub Next Discord - Participate in discussions on GitHub issues
- Collaborate by crafting high-quality agentic plans for the core team to implement
This project follows the GitHub Community Guidelines. Please be respectful and inclusive in all interactions.
- For bugs or features: Open a GitHub issue with a detailed agentic plan
- For questions: Ask in issues, discussions, or Discord
- For examples: Look at existing issues and PRs created by core team members
- Remember: You don't create PRs - you create issues with plans that a core team member implements using agents
This project is built by a core team using agentic development to demonstrate and dogfood the capabilities of GitHub Agentic Workflows:
- Dogfooding: We use our own tools to build our tools
- Consistency: All changes go through the same automated quality gates
- Best practices: Agents follow established guidelines automatically
- Focus on outcomes: Describe what you want, not how to build it
- Quality plans: Encourages contributors to think through the full implementation before work begins
Community members contribute by crafting detailed agentic plans that the core team picks up and implements. This keeps the bar high β well-thought-out plans lead to well-executed PRs.
The Development Guide is the reference guide used by core team members and their agents.
Thank you for contributing to GitHub Agentic Workflows! π€π