Thank you for your interest in contributing to AFX (AgenticFlowX)!
- Use GitHub Issues to report bugs or suggest features
- Include clear reproduction steps for bugs
- For feature requests, explain the use case and the workflow gap it addresses
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Make your changes
- Test your changes in a real project (see Testing below)
- Update the CHANGELOG
- Commit with a clear message (see Commit Conventions below)
- Push to your fork and open a Pull Request
- Clone the repository
- Install skills into a test project:
./afx-cli /path/to/your-test-project
- Open the test project with Claude Code (or your preferred agent)
- Run the skill you modified and verify the output
Skills are markdown prompt files — there is no build step. Verify changes by:
- Install locally:
./afx-cli --source . /path/to/test-project - Trigger the skill in your test project and confirm the agent follows the updated instructions
- Check frontmatter: confirm
name,description,license, andmetadatafields are valid YAML - Check templates: if you modified an
assets/template, scaffold a new feature and verify the generated file matches the template
Use conventional commit format:
feat(afx-session): add capture subcommand for verbatim prompt storage
fix(afx-task): correct gate check in verify subcommand
docs(cheatsheet): add Core/Support command tiering
chore(packs): update agenticflowx pack manifest
Types: feat, fix, docs, chore, refactor, test
- Keep skill instructions clear and unambiguous — agents follow them literally
- Follow existing patterns in SKILL.md files (frontmatter, Execution Contract, Post-Action Checklist)
- Document the
whyin comments when a constraint is non-obvious - Update
cheatsheet.mdwhen adding or renaming commands
- Update
docs/agenticflowx/when changing skill behavior - Update
prd-reference.mdwhen adding or removing subcommands - Add entries to
CHANGELOG.mdfor every user-visible change - Keep the cheatsheet current — it is the first reference most users reach for
Every PR that changes skill behavior, adds a command, or fixes a bug must include a CHANGELOG.md entry under ## [Unreleased].
Releases are cut from main. The Claude Code marketplace output (.claude-plugin/ + plugins/) is generated and committed — it must be rebuilt whenever skills/, packs/, or the catalog version change (CI enforces this via .github/workflows/marketplace.yml).
- Bump
versioninskills.json(single source of truth for catalog + all plugin manifests) - Move
## [Unreleased]entries inCHANGELOG.mdto the new version - Regenerate marketplace output:
node scripts/build-plugins.mjs - Commit everything (including
.claude-plugin/andplugins/), tagv{VERSION}, push with tags - Create the GitHub release for the tag
Open an issue for any questions about contributing.