Thank you for your interest in contributing to Agentify!
- New emitters (output formats) — this is the most valuable contribution type
- Bug fixes (please include a failing test)
- Documentation improvements
- OpenAPI spec compatibility fixes
- Large architectural refactors (open a Discussion first)
- New parser frontends (only OpenAPI supported currently)
- Breaking changes without prior discussion
git clone https://github.com/koriyoshi2041/agentify.git
cd agentify
npm install
npm test # Run tests (should all pass)
npm run lint # TypeScript type check- Open an Issue first for changes > 50 lines
- Fork the repo and create a feature branch
- Write tests first (TDD: Red -> Green -> Refactor)
- Ensure all tests pass:
npm test - Ensure TypeScript compiles:
npm run lint - Submit a Pull Request
- TypeScript strict mode
- Immutable patterns (never mutate, always spread)
- Small files (200-400 lines, max 800)
- No dynamic code evaluation or unsafe constructors in generated code
Emitters are the best way to contribute. Each emitter:
- Implements the
Emitterinterface fromsrc/types.ts - Lives in
src/generator/as a single file (200-600 lines) - Accepts
AgentifyIRand returnsEmitterResult - Includes at least 3 test cases
- Must pass the security scanner
import type { Emitter, AgentifyIR, EmitterOptions, EmitterResult } from "../types";
export class MyFormatEmitter implements Emitter {
readonly name = "my-format";
readonly format = "my-format";
async emit(ir: AgentifyIR, options: EmitterOptions): Promise<EmitterResult> {
// Generate output files
return { filesWritten: [...], warnings: [] };
}
}Follow conventional commits:
feat: add skills emitter
fix: handle missing auth in parser
docs: update README examples
test: add edge case for large APIs
Open a Discussion on GitHub.