Thanks for your interest in contributing.
- Fork the repository
- Clone your fork locally
- Create a feature branch:
git checkout -b feat/my-change - Make your changes
- Run tests:
make test - Commit using Conventional Commits
- Push and open a Pull Request
make setupEquivalent to mise run install_all — installs all language toolchains and dependencies (Go, Rust, PHP, Node, Python, buf). Requires mise to be installed.
Five language roots under one repo:
go/— first-party Go SDK (hop.top/agntcy) +agntcyCLIrs/— first-party Rust workspace (poly-agntcy-dir,poly-agntcy-dir-spiffe)php/— first-party PHP packages (poly-agntcy/dir{,-laravel,-symfony,-spiffe})ts/— TypeScript adapters (@poly-agntcy/dir-{next,hono,express}) wrapping the officialagntcy-dirnpm packagepy/— Python adapters (poly-agntcy-dir-{fastapi,flask,django}) wrapping the officialagntcy-dirPyPI package
Per-language work happens inside its dir. Cross-cutting changes (protobuf, workflows, ADRs) live at the repo root.
- Follow existing conventions in each language root.
- Run linters before submitting:
make lint. - Keep changes focused; one concern per PR.
- Read the architecture overview or the full design spec.
Use Conventional Commits:
feat(scope): add new feature
fix(scope): correct a bug
docs: update readme
test: add missing tests
The scope matches a release-please component: go, go-spiffe, rs, rs-spiffe, php, php-laravel, php-symfony, php-spiffe, ts-next, ts-hono, ts-express, py-fastapi, py-flask, py-django. Scopeless commits trigger no release.
Breaking changes use the ! suffix or a BREAKING CHANGE: footer per the spec.
- Reference related issues in the PR description
- Keep PRs small and reviewable
- Ensure CI passes before requesting review
- Update documentation if behavior changes
- Search existing issues before opening a new one
- Use issue templates when available
- Provide reproduction steps for bugs
See CODE_OF_CONDUCT.md.