Thank you for your interest in contributing to airiscode! This document provides guidelines and instructions for contributing.
- Node.js >= 20.0.0
- pnpm >= 8.0.0
- Git
-
Fork the repository
-
Clone your fork:
git clone https://github.com/yourusername/airiscode.git cd airiscode -
Install dependencies:
pnpm install
-
Build all packages:
pnpm build
-
Run tests:
pnpm test
This is a pnpm + Turbo monorepo. See AGENTS.md for detailed structure guidelines.
apps/airiscode-cli/- Main CLI applicationpackages/*/- Reusable packagestools/make/- Build and development scriptsdocs/- Documentation
main- Stable production-ready codedevelop- Integration branch for ongoing developmentfeature/*- Feature development branches
-
Create a feature branch from
develop:git checkout develop git pull origin develop git checkout -b feature/your-feature-name
-
Make your changes following our coding standards
-
Run tests and linting:
pnpm lint pnpm test pnpm build -
Commit your changes using conventional commits:
git commit -m "feat: add new feature" git commit -m "fix: resolve bug in shell guard" git commit -m "docs: update README"
We use conventional commit messages:
feat:- New featurefix:- Bug fixdocs:- Documentation changesrefactor:- Code refactoringtest:- Adding or updating testschore:- Maintenance tasksperf:- Performance improvements
-
Push your branch to your fork
-
Create a Pull Request to the
developbranch -
Fill out the PR template with:
- Description of changes
- Related issue numbers
- Testing performed
- Screenshots (if applicable)
-
Wait for code review
-
Address review feedback
-
Once approved, your PR will be merged
- Use strict TypeScript (
strict: true) - 2-space indentation
- Semicolons required
- Single quotes for strings
- Types/Interfaces/Classes: PascalCase (
PolicyProfile,ShellGuard) - Functions/Variables: camelCase (
evaluateCommand,guardResult) - Directories: kebab-case (
shell-guard,mcp-client) - Files: kebab-case with extension (
shell-guard.ts,policy-profile.spec.ts)
- Place tests next to the code:
*.spec.ts - Use Vitest for all tests
- Aim for >80% code coverage
- Test both happy path and error cases
- Add JSDoc comments for exported functions and classes
- Update README.md when adding new features
- Keep CLAUDE.md and related docs in sync
When adding new adapters or tools that execute shell commands:
-
Always route through Shell Guard:
import { ShellGuard } from '@airiscode/sandbox'; const guard = new ShellGuard(policy); const result = guard.evaluate(command);
-
Never downgrade policy defaults in code
-
Document dangerous patterns in
packages/sandbox/src/deny-list.ts -
Add regression tests for blocked commands
- Respect
--approvalsand--trustflags - Never bypass policy checks
- Log all policy violations
- Create directory under
packages/ - Add
package.jsonwith workspace dependencies - Add
tsconfig.jsonextending../../tsconfig.base.json - Add
src/index.tsas entry point - Add
__tests__/directory with spec files - Update
pnpm-workspace.yamlif needed
# Build single package
pnpm --filter @airiscode/sandbox build
# Test single package
pnpm --filter @airiscode/policies test
# Run CLI in dev mode
pnpm --filter airiscode-cli dev
# Clean all build artifacts
pnpm cleanDEBUG=airiscode:* pnpm devSee .vscode/launch.json (TBD)
- Check CLAUDE.md for architecture guidance
- Read ARCHTECHTURE.md for system design
- Review 実装計画プランニング.md for implementation plan
- Open a GitHub Discussion for questions
- Join our Discord (TBD)
Be respectful, inclusive, and constructive in all interactions.
By contributing, you agree that your contributions will be licensed under the MIT License.