A batteries-included TypeScript starter template with comprehensive testing, code quality automation, and security scanning. Built for modern Node.js development with AI-assisted (agentic) coding workflow.
Note: This template includes example code to demonstrate its capabilities. These example files are clearly marked with header comments and should be removed when starting your project. See Getting Started for details.
"Agentic" in this context refers to AI-assisted development workflow, not AI agent runtime. This template is designed to work seamlessly with AI development tools like Claude Code to enhance your productivity through:
- π€ AI-powered code generation - Let AI assistants help write boilerplate and tests
- π Automated refactoring - AI tools can safely refactor with comprehensive test coverage
- π Documentation assistance - AI can help maintain docs in sync with code
- π― Issue-to-implementation workflows - Custom commands for AI-driven development
Important: This is a template repository for starting new projects. No AI agents or chatbots are included - the "agentic" aspect comes from using AI development tools (like Claude) to assist you in building your application faster and with higher quality.
Core: Node.js 22+ β’ TypeScript ^5.9.2 (strict) β’ pnpm 10.15
Testing: Vitest β’ fast-check (property testing) β’ 80% coverage minimum
Quality: ESLint 9 β’ Prettier β’ Husky β’ Commitlint
Security: CodeQL β’ OSV Scanner β’ SBOM β’ SLSA attestations
CI/CD: GitHub Actions β’ Changesets β’ Automated releases
- Getting Started - Setup and installation
- Development - Workflows and commands
- Testing - Test patterns and coverage
- Docker - Docker configuration and healthchecks
- Patterns - Copy-paste code examples
- Troubleshooting - Common issues
# Clone and setup
git clone https://github.com/sapientpants/agentic-node-ts-starter.git my-project
cd my-project
# Install dependencies (requires Node.js 22+ and pnpm 10.15)
pnpm install
# Set up configuration (required)
cp .env.example .env
# Edit .env with your configuration
# See docs/CONFIG.md for required environment variables
# Verify everything works
pnpm test
pnpm verify # Full quality check
# Start developing
pnpm dev # TypeScript watch modePrerequisites: Node.js 22+, pnpm 10.15, GitHub repo (for CI/CD)
Full setup guide: docs/GETTING_STARTED.md
# Development
pnpm dev # TypeScript watch mode
pnpm build # Build to dist/
pnpm verify # Run all quality checks
# Testing (80% coverage required)
pnpm test # Run tests
pnpm test:watch # Watch mode
pnpm test:coverage # With coverage report
# Quality
pnpm lint # Check linting
pnpm lint:fix # Fix linting issues
pnpm format # Check formatting
pnpm format:fix # Fix formatting
pnpm typecheck # Type check only
# Releases
pnpm changeset # Create changeset
pnpm sbom # Generate SBOMFull command reference: docs/DEVELOPMENT.md
Comprehensive quality metrics tracked automatically on every CI run:
| Metric | Current | Threshold | Status | Local Command |
|---|---|---|---|---|
| Line Coverage | 93.77% | β₯80% | β Pass | pnpm test:coverage |
| Branch Coverage | 84.95% | β₯80% | β Pass | pnpm test:coverage |
| Function Coverage | 100% | β₯80% | β Pass | pnpm test:coverage |
| Statement Coverage | 93.65% | β₯80% | β Pass | pnpm test:coverage |
| Mutation Score | N/A | β₯80% | β³ Pending | pnpm mutation-test |
| Metric | Current | Threshold | Status | Local Command |
|---|---|---|---|---|
| Code Duplication | 0% | <2% | β Pass | pnpm duplication |
| Cyclomatic Complexity | Max 10 | β€10 | β Pass | pnpm lint |
| Max Function Lines | Max 50 | β€50 | β Pass | pnpm lint |
| Max Function Parameters | Max 4 | β€4 | β Pass | pnpm lint |
| Max Nesting Depth | Max 3 | β€3 | β Pass | pnpm lint |
| Circular Dependencies | 0 | 0 | β Pass | pnpm deps:circular |
| Dead Code | 0 | 0 | β Pass | pnpm dead-code |
| Metric | Status | Tool | Local Command |
|---|---|---|---|
| Critical Vulnerabilities | β 0 | pnpm audit | pnpm audit |
| High Vulnerabilities | β 0 | OSV Scanner | CI only |
| CodeQL Findings | β 0 | CodeQL | CI only |
| Container Vulnerabilities | β 0 | Trivy | pnpm scan:container |
| Metric | Status | Tool | Local Command |
|---|---|---|---|
| TypeScript Compilation | β Pass | tsc | pnpm typecheck |
| ESLint Violations | β 0 | ESLint | pnpm lint |
| Prettier Formatting | β Pass | Prettier | pnpm format |
| Workflow Validation | β Pass | actionlint | pnpm lint:workflows |
- Coverage: Vitest with V8 coverage provider
- Mutation Testing: Stryker Mutator (JavaScript/TypeScript)
- Duplication: jscpd (Copy/Paste Detector)
- Complexity: ESLint with complexity rules
- Circular Deps: madge (dependency graph analyzer)
- Dead Code: Knip (unused exports, files, dependencies, types)
- Security: pnpm audit, OSV Scanner, CodeQL, Trivy
- Type Safety: TypeScript strict mode + type-aware ESLint rules
Note: Metrics are auto-updated on every push to main as part of the build workflow. The
quality-metrics.jsonfile is committed automatically after validation completes.
This project enforces strict quality standards to ensure maintainability, security, and reliability:
80% Coverage Minimum - Ensures comprehensive test coverage without requiring 100% (which can lead to diminishing returns)
Low Complexity Limits - Functions with cyclomatic complexity >10 are harder to understand, test, and maintain
Zero Duplication Target - DRY principle reduces maintenance burden and bugs
No Circular Dependencies - Prevents tight coupling and enables better modularity
No Dead Code - Keeps codebase lean and maintainable
Zero Critical/High Vulnerabilities - Security-first approach protects users and infrastructure
| Limit | Rationale |
|---|---|
| Cyclomatic Complexity β€10 | Industry standard for maintainable code (NIST, IEEE) |
| Max 50 Lines/Function | Single screen view improves comprehension |
| Max 4 Parameters | Reduces cognitive load, encourages better abstractions |
| Max 3 Nesting Depth | Prevents deeply nested code that's hard to reason about |
| Max 15 Statements | Forces function decomposition, improves testability |
| Code Duplication <2% | Minimal threshold allowing for small necessary repetition |
| Mutation Score β₯80% | Ensures tests actually verify behavior, not just achieve coverage |
Test files (tests/**/*.ts) have relaxed limits:
- Cyclomatic complexity: β€15 (vs 10)
- Max lines per function: β€600 (vs 50) - allows large describe blocks with many test cases
The pnpm precommit command runs checks in optimized order for fast feedback:
- Security (
pnpm audit) - Blocks commits with critical vulnerabilities - Formatting (
pnpm format) - Fast, easy to fix - YAML/Markdown Linting - Fast file validation
- Workflow Validation - Prevents broken GitHub Actions
- Type Checking (
pnpm typecheck) - Required for type-aware lint rules - Linting (
pnpm lint) - Comprehensive quality checks - Structural Analysis - Circular deps, duplication, dead code
- Tests with Coverage (
pnpm test:coverage) - Slowest check runs last
Mutation testing is excluded from pre-commit due to performance - run it periodically (weekly/monthly).
This project includes special configurations for Claude Code:
/analyze-and-fix-github-issue- Complete workflow for fixing GitHub issues/release- Automated release process/update-dependencies- Update dependencies with PR workflow
- Prevents bypassing verification with
--no-verifyflag - Ensures all commits pass quality checks
See CLAUDE.md for detailed Claude Code guidance.
.
βββ .claude/ # Claude Code configurations
β βββ commands/ # Custom slash commands
β βββ hooks/ # Git hook scripts
βββ .github/ # GitHub Actions workflows
βββ docs/ # Documentation
βββ src/ # Source code
βββ tests/ # Test files
β βββ *.spec.ts # Unit tests
β βββ *.property.spec.ts # Property-based tests
βββ mise.toml # Tool version management
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
- π Type-safe configuration with Zod validation
- π Configurable logging output - Redirect logs to stderr, files, syslog, or disable entirely (see docs/LOGGING_OUTPUT.md)
- π Environment validation at startup with clear errors
- π Sensitive value masking in error messages
- π See docs/CONFIG.md for configuration guide
- β Vitest with property-based testing (fast-check)
- β 80% coverage minimum enforced
- β Strict TypeScript with type-aware linting
- β Pre-commit hooks with Husky & lint-staged
- β Markdown and YAML linting for docs/config consistency
- π CodeQL static analysis
- π OSV Scanner for dependencies
- π SBOM generation (CycloneDX)
- π SLSA attestations for artifacts
- π GitHub Actions CI/CD pipeline
- π Changesets for versioning
- π Automated releases with changelog
- π Claude Code integration
Actions permissions (Settings β Actions β General):
- β Read and write permissions
- β Allow GitHub Actions to create and approve pull requests
Auto-merge (Settings β General β Pull Requests):
- β Allow auto-merge
- β Automatically delete head branches
For automated releases, add secrets:
RELEASE_TOKEN- GitHub PAT with repo/workflow scopes (triggers publish workflow)NPM_TOKEN- For npm publishing (optional)
To enable npm publishing:
- Add
NPM_TOKENsecret in repository settings - Remove
"private": truefrom package.json - Use a scoped package name:
@yourorg/package-name
β οΈ Important: The default Dockerfile includes a healthcheck that expects a web server with a/healthendpoint on port 3000. See Docker Configuration Guide for detailed instructions on configuring healthchecks for different application types (web services, CLI tools, workers).
To enable Docker builds:
- Set repository variable
ENABLE_DOCKER_RELEASEtotrue - Add secrets for Docker Hub (optional):
DOCKERHUB_USERNAMEDOCKERHUB_TOKEN
- Images are automatically pushed to GitHub Container Registry
- Dependency Auditing: Critical vulnerability checks on every CI run
- SBOM Generation: CycloneDX format for supply chain transparency
- CodeQL Analysis: Static security analysis
- OSV Scanning: Open Source Vulnerability detection
- SLSA Provenance: Build attestations
- Container Attestations: SBOM and provenance for Docker images
- Contributing Guide - How to contribute to this project
- Development Process - End-to-end workflow and checklists
- Architecture Decisions - ADR records
This is a template repository. Feel free to use it for your projects.