Generated at build time from CONTRIBUTING.md
Contributing
Thanks for contributing to agemon. Everyone taking part follows the Code of Conduct; how decisions are made is in GOVERNANCE.md.
Start here
Section titled “Start here”- Open the repository in its dev container (
.devcontainer/: Node 22 and pipx, no systemd needed), or install Node 22.12+ yourself and runnpm install. - See what agemon does, safely, in a throwaway copy of a test repository:
npm run sandbox -- run clean-repo --dry-run- Pick a guide:
- Adding a skill to a bundled skill group;
- Writing a capability plugin;
- issues labelled
good first issueare a good place to begin.
Development Setup
Section titled “Development Setup”- Install dependencies:
npm install- Enable the repo git hooks (one time) so commit messages are checked locally:
git config core.hooksPath .githooks- Run local quality checks:
npm run lintnpm run lint-skillsnpm run typechecknpm test- If you change anything the website is built from (
README.md,SECURITY.md,CHANGELOG.md,docs/contributing/, the skill catalog, CLI help text, theagemon.tomlkey reference insrc/core/config.tsorwebsite/), build it once. CI does the same on every pull request:
npm ci --prefix website --ignore-scriptsnpm run website:buildSandbox Workflow (Required)
Section titled “Sandbox Workflow (Required)”Use the sandbox harness to verify behavior in an isolated environment before opening a PR.
- Dry-run checkpoint:
npm run sandbox -- run clean-repo --dry-run- Real isolated run checkpoint:
npm run sandbox -- run clean-repo- Reversibility checkpoint:
npm run sandbox -- roundtrip clean-repoUse --real only when you intentionally want to exercise host-coupled tooling.
Code Style
Section titled “Code Style”- Node.js
>=22.12 - TypeScript + ESM
- Biome for formatting and linting
Format changes when needed:
npm run formatCommit Messages
Section titled “Commit Messages”Every commit subject must follow Conventional Commits 1.0.0:
<type>[(scope)][!]: <description>Allowed types:
| Type | Meaning |
|---|---|
feat |
a user-facing feature (drives a minor bump) |
fix |
a bug fix (drives a patch bump) |
perf |
a performance improvement |
refactor |
code change that neither fixes a bug nor adds a feature |
docs |
documentation only |
test |
adding or fixing tests |
build |
build system or bundling changes |
ci |
CI configuration changes |
chore |
maintenance with no src/ impact |
revert |
reverts a previous commit |
Breaking changes: append ! after the type (feat!: ...) or add a BREAKING CHANGE:
footer. Either drives a major bump.
Examples:
feat(installer): verify tarball checksum before extractionfix: bundle every runtime dependency so the tarball runs standaloneci: smoke-test the packaged bundleThe commit-msg hook checks this locally once core.hooksPath is set (see Development
Setup); the commitlint CI job is the enforced gate and blocks merge on failure.
PRs are squash-merged, so the PR title becomes the commit subject on master and must
itself be a valid Conventional Commit — the pr-title CI job enforces this.
Commit and Release Flow
Section titled “Commit and Release Flow”Each release is one self-contained tarball, attached to the GitHub Release (installed by
install.sh) and published to npm as agemon. See docs/releasing.md for the full flow.
- For user-facing changes, add a
## X.Y.Zentry to the top ofCHANGELOG.mddescribing them (a maintainer will fold this into the next release’s version bump). - CI validates code quality and sandbox checks on every PR.
- Maintainers cut releases by tagging
vX.Y.Z— seedocs/releasing.md.
Pull Requests
Section titled “Pull Requests”- Keep changes scoped to one task.
- Include test updates when behavior changes.
- Include the sandbox commands you ran in the PR description.