ccusage TypeScript
SkillFiles & storageLoads project style rules so your agent writes correct TypeScript and JavaScript when editing code in this repo.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the ccusage TypeScript skill
About this capability
Guides ccusage TypeScript and JavaScript work. Use before reading or editing .ts, .tsx, .js, or .jsx files, including the npm launcher, Node tests, build and fixture scripts, mocks, and typed literals.
What this skill tells your AI
The instructions your AI receives, as published by ccusage/ccusage in .agents/skills/typescript/SKILL.md and read by ahel’s review.
Runtime CLI behavior lives in Rust under rust/. New adapter logic belongs there,
not here, unless the user scopes work to the package layer. What remains in
TypeScript and JavaScript:
apps/ccusage/src/cli.js— native binary launcher, covered bycli.test.tsbeside it.apps/ccusage/scripts/generate-large-fixture.ts— benchmark fixture generator, run throughjust generate-large-fixture; it executes under Bun via a Nix shebang, and apart from itsbun-globals.d.tsthe rest of that directory is Nushell and Babashka.nix/tools/models-dev-gen/— models.dev pricing snapshot generator;just gen-models-dev-pricingreruns it,just gen-bun-nixrefreshes itsbun.nix.docs/.vitepress/config.tsand root TypeScript configuration or scripts, when the change is not docs-content-only.
Style
Beyond ordinary TypeScript practice: .ts extensions on local imports, static
imports over dynamic ones, Node path utilities for file paths, and exports limited
to values used outside the module.
Type literals with satisfies rather than an as assertion, so excess and missing
properties still fail typecheck — object literals, mocks, config objects, fixture
data, expected rows. as any on a mock context loses that check entirely. Reach
for as only where satisfies cannot express the operation, such as narrowing
data from an external untyped boundary or adapting to an API that requires a
nominal type, and keep it local.
Add as const for static literal data where exact literal values or readonly
tuples help catch mistakes, including table-driven cases:
const reportCases = [
{ type: 'daily', period: '2026-05-16' },
{ type: 'monthly', period: '2026-05' },
] as const satisfies readonly ReportCase[];
Close switches over discriminated or literal unions with satisfies never in the
default branch, so a new variant fails typecheck until its branch exists. Suppress
with @ts-expect-error plus a short explanation, not @ts-ignore, so the
suppression fails once the underlying error disappears.
Routing
- Node tests:
just test-nodeduring iteration; layout and runner wiring in.agents/skills/testing/references/node-test.md. - Launcher, benchmark, packaging script, or native CLI performance:
profile. - TypeScript duplication checks:
ast-greporrg. There is no similarity-ts workflow here. - Repo-wide format, typecheck, and check recipes:
development.
Signals
- GitHub stars
- 18k
- Forks
- 821
- Last commit
- Sep 2026
- Hacker News mentions
- 20
Advanced
- Catalog kind
- skill
- Gateway key
typescript-ccusage- Source
- github.com/ccusage/ccusage