Help us improve
Share bugs, ideas, or general feedback.
From dev-specialisms
Initialize and configure local development tooling for TypeScript, Rust, and Python projects including monorepos. Use when setting up linting (ESLint, Biome, clippy, ruff), formatting (Prettier, rustfmt, ruff), type checking (tsc, mypy), testing (Vitest, Jest, cargo test, pytest), Git hooks (lefthook for commit-msg, pre-commit, pre-push), GitHub Actions workflows, package publishing (npm, crates.io, PyPI), version management (Changesets), and automated releases. Covers both single-language projects and multi-language monorepos using Nx + pnpm workspaces.
npx claudepluginhub aaronbassett/agent-foundry --plugin dev-specialismsHow this skill is triggered — by the user, by Claude, or both
Slash command
/dev-specialisms:init-local-toolingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Comprehensive setup for linting, formatting, type checking, testing, Git hooks, CI/CD, and publishing across TypeScript, Rust, and Python projects.
assets/configs/git-hooks/commitlint.config.jsassets/configs/git-hooks/lefthook.ymlassets/configs/monorepo/nx.jsonassets/configs/monorepo/pnpm-workspace.yamlassets/configs/python/pyproject.tomlassets/configs/python/ruff.tomlassets/configs/rust/clippy.tomlassets/configs/rust/deny.tomlassets/configs/rust/rustfmt.tomlassets/configs/typescript/biome.jsonassets/configs/typescript/eslint.config.jsassets/configs/typescript/tsconfig.strict.jsonassets/workflows/ci.ymlassets/workflows/publish-changesets.ymlassets/workflows/publish-crates.ymlassets/workflows/publish-npm.ymlassets/workflows/publish-pypi.ymlreferences/ci-cd.mdreferences/git-hooks.mdreferences/monorepo.mdInitializes new Python, Rust, or TypeScript projects interactively with git repo, GitHub workflows, pre-commit hooks, Makefile, and standard configs. Updates existing projects too.
Bootstraps new projects or improves existing ones with best practices for structure, git, documentation, testing, code quality, dependencies, dev workflow, and CI/CD.
Sets up Git hooks with Husky, lint-staged, pre-commit framework, and commitlint to automate linting, formatting, testing, and commit message validation before CI.
Share bugs, ideas, or general feedback.
Comprehensive setup for linting, formatting, type checking, testing, Git hooks, CI/CD, and publishing across TypeScript, Rust, and Python projects.
Use this skill when you need to:
Automated setup:
./scripts/init_typescript.sh
Choose tooling:
What you get:
→ See: references/typescript.md
Manual setup (opinionated configs in assets/):
# Tools come with Rust
rustup component add rustfmt clippy
# Optional: Enhanced tooling
brew install cargo-nextest cargo-deny
# Copy configs from assets/configs/rust/
cp assets/configs/rust/rustfmt.toml .
cp assets/configs/rust/clippy.toml .
→ See: references/rust.md
Using uv (recommended):
# Install uv
brew install uv
# Create project
uv init my-project
cd my-project
# Add dev dependencies
uv add --dev ruff mypy pytest
# Copy config from assets/
cp assets/configs/python/pyproject.toml .
→ See: references/python.md
Create Nx + pnpm monorepo:
./scripts/init_monorepo.sh
Or manually:
npx create-nx-workspace@latest my-monorepo
# Choose: pnpm + integrated monorepo
→ See: references/monorepo.md
Single Language Project → Use language-specific init script or manual setup → See Quick Start above
Monorepo (Multiple Packages) → Set up Nx + pnpm workspaces → See references/monorepo.md
Automated setup:
./scripts/setup_lefthook.sh
This configures:
→ See: references/git-hooks.md
Copy workflow templates:
# Basic CI
cp assets/workflows/ci.yml .github/workflows/
# Language-specific workflows available in assets/
→ See: references/ci-cd.md
For npm packages:
./scripts/setup_changesets.sh
Then copy publishing workflows from assets/workflows/.
→ See:
Tooling options:
Testing:
Key decisions:
→ Full guide: references/typescript.md
Built-in tools:
rustfmt - Code formattingclippy - Lintingcargo test - TestingEnhanced tools:
cargo-nextest - Faster test runnercargo-deny - Dependency securitycargo-make - Task runner→ Full guide: references/rust.md
Modern stack (recommended):
→ Full guide: references/python.md
Automated:
./scripts/setup_lefthook.sh
Manual:
brew install lefthook
lefthook install
lefthook.yml:
commit-msg:
commands:
commitlint:
run: npx commitlint --edit {1}
pre-commit:
parallel: true
commands:
format:
glob: "*.{ts,rs,py}"
run: format-staged-files {staged_files}
stage_fixed: true
pre-push:
commands:
validate:
run: ./scripts/validate_all.sh
→ Full guide: references/git-hooks.md
Key principle: Nx builds on top of pnpm, doesn't replace it.
# Run target for all packages
nx run-many --target=build --all
# Run only for affected
nx affected --target=test
# Visualize dependencies
nx graph
→ Full guide: references/monorepo.md
Recommended for monorepos and npm packages.
pnpm changeset
# Select packages, type (major/minor/patch), write summary
pnpm changeset version
# Updates package.json, generates CHANGELOG.md
pnpm changeset publish
git push --follow-tags
Use GitHub Actions to automate releases:
Copy workflow:
cp assets/workflows/publish-changesets.yml .github/workflows/
This creates "Version Packages" PR on main when changesets exist.
→ See:
Best practice: Run same checks in CI as local pre-push hook.
GitHub Actions templates:
ci.yml - Basic linting, testing, buildingpublish-npm.yml - Automated npm publishingpublish-crates.yml - Automated crates.io publishingpublish-pypi.yml - Automated PyPI publishingTest across multiple versions:
strategy:
matrix:
node-version: [18, 20, 21]
os: [ubuntu-latest, macos-latest]
Use affected commands to only test changed packages:
nx affected --target=test
nx affected --target=build
→ Full guide: references/ci-cd.md
Automated:
./scripts/init_typescript.sh --biome
# or
./scripts/init_typescript.sh --eslint-prettier
Creates:
./scripts/setup_lefthook.sh
Configures:
./scripts/setup_changesets.sh
Sets up:
./scripts/validate_all.sh
Runs:
scripts/)Setup scripts:
init_typescript.sh - Initialize TypeScript projectsetup_lefthook.sh - Configure Git hookssetup_changesets.sh - Set up version managementvalidate_all.sh - Run all checks (used by pre-push)Usage:
./scripts/script_name.sh
All scripts check if tools are installed/up-to-date before proceeding.
assets/configs/)TypeScript:
tsconfig.strict.json - Strict TypeScript configbiome.json - Biome configurationeslint.config.js - ESLint flat config.prettierrc.json - Prettier configurationRust:
rustfmt.toml - Rustfmt configurationclippy.toml - Clippy lintsdeny.toml - Cargo-deny configurationPython:
pyproject.toml - ruff, mypy, pytest configruff.toml - Standalone ruff configMonorepo:
nx.json - Nx configurationpnpm-workspace.yaml - pnpm workspacesGit Hooks:
lefthook.yml - Complete lefthook configcommitlint.config.js - Conventional commitsGitHub Workflows:
ci.yml - Basic CIpublish-changesets.yml - Automated releasespublish-npm.yml - npm publishingpublish-crates.yml - crates.io publishingpublish-pypi.yml - PyPI publishingreferences/)Language guides:
typescript.md - ESLint+Prettier vs Biome, testing, monoreporust.md - rustfmt, clippy, cargo-nextest, cargo-denypython.md - ruff, mypy, pytest, uv vs poetryInfrastructure:
monorepo.md - Nx + pnpm workspaces setupgit-hooks.md - lefthook configurationci-cd.md - GitHub Actions workflowspublishing.md - npm, crates.io, PyPI publishingversion-management.md - Changesets workflowCheck installation:
lefthook install
ls -la .git/hooks/
Test manually:
lefthook run pre-commit
ESLint + Prettier conflicts:
eslint-config-prettier is last in configBiome + Prettier conflicts:
Debugging:
./scripts/validate_all.sh locallySetup new TypeScript project:
./scripts/init_typescript.sh
Setup Git hooks:
./scripts/setup_lefthook.sh
Setup Changesets:
./scripts/setup_changesets.sh
Run full validation:
./scripts/validate_all.sh
Common commands:
# TypeScript
npm run lint && npm run type-check && npm test
# Rust
cargo fmt -- --check && cargo clippy -- -D warnings && cargo test
# Python
ruff check . && mypy . && pytest
# Monorepo
nx affected --target=test
nx run-many --target=build --all
# Changesets
pnpm changeset
pnpm changeset version
pnpm changeset publish