About isentinel
isentinel is a set of opinionated tooling and development practices for roblox-ts projects, aimed at TypeScript developers. It specifies conventions for package management, strict typing, linting, and Jest-roblox testing.
Key features
- 01pnpm package management
- 02Strict roblox TypeScript configuration
- 03ESLint-based linting and formatting
- 04Jest-roblox test-driven development
- 05Conventional Commits and Git hooks
Use cases
- 01Standardizing roblox-ts project setup
- 02Applying stricter TypeScript checks
- 03Organizing linting and formatting
- 04Structuring Jest-roblox tests
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ christopher-buss/ skills --skill isentinelAfter installing, type/isentinelin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/error-handling.mdlinting.mdtesting.mdtooling.mdtypescript.mdDetails
From the project READMEisentinel Preferences
Opinionated tooling and patterns for roblox-ts development.
Quick Summary
| Category | Preference |
|---|---|
| Package Manager | pnpm (bun as optional runtime) |
| Language | TypeScript (strict + extra checks) |
| TypeScript Config | @isentinel/tsconfig |
| Linting | @isentinel/eslint-config (no Prettier) |
| Testing | Jest-roblox, TDD approach |
| Git Hooks | husky + lint-staged |
| Commits | Conventional Commits |
Package Manager (pnpm)
Use pnpm as the package manager. Can use bun as runtime for scripts.
@antfu/ni
Use @antfu/ni for unified package manager commands (It auto-detects the
package manager (pnpm/npm/yarn/bun) based on lockfile):
| Command | Description |
|---|---|
ni | Install dependencies |
ni <pkg> | Add dependency |
ni -D <pkg> | Add dev dependency |
nr <script> | Run script |
nu | Upgrade dependencies |
nun <pkg> | Uninstall dependency |
nci | Clean install |
nlx <pkg> | Execute package |
TypeScript
Use @isentinel/tsconfig with the roblox preset. Strict mode plus additional
checks:
exactOptionalPropertyTypesnoUncheckedIndexedAccessnoPropertyAccessFromIndexSignaturenoImplicitOverridenoImplicitReturnsnoFallthroughCasesInSwitch
{
"extends": "@isentinel/tsconfig/roblox"
}
Linting
Use @isentinel/eslint-config. No Prettier - ESLint handles formatting.
// eslint.config.ts
import { isentinel } from "@isentinel/eslint-config";
export default isentinel();
Fix errors with nr lint --fix.
Error Handling
Prefer assertions over silent failing. Fail fast, fail loud.
See error-handling.md for patterns.
Test-Driven Development
Red → Green → Refactor:
- Write a failing test
- Write minimal code to pass
- Refactor with test protection
Simplicity Rules (in order)
- Passes all tests
- Expresses intent clearly
- Contains no duplication
- Has minimum elements
Three similar lines of code is better than a premature abstraction.
See testing.md for Jest-roblox setup.
References
| Topic | Reference |
|---|---|
| Tooling details | tooling.md |
| TypeScript config | typescript.md |
| Linting rules | linting.md |
| Testing (TDD) | testing.md |
| Error handling | error-handling.md |