Deepgram SDK Patterns
jeremylongshore/tons-of-skills-marketplace
Apply production-ready Deepgram SDK patterns for TypeScript and Python.
TypeScript engineering guidelines based on Google's style guide.
$ npx skills add rishighan/threetwo --skill typescript -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install rishighan/threetwo typescript --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/rishighan/threetwo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/typescript .claude/skills/typescript && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "typescript" agent skill from https://github.com/rishighan/threetwo/tree/main/.claude/skills/typescript into .claude/skills/typescript/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "typescript", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/rishighan/threetwo/tree/main/.claude/skills/typescriptType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add rishighan/threetwo --skill typescript -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install rishighan/threetwo typescript --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rishighan/threetwo.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/typescript .agents/skills/typescript && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "typescript" agent skill from https://github.com/rishighan/threetwo/tree/main/.claude/skills/typescript into .agents/skills/typescript/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "typescript", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rishighan/threetwo --skill typescript -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install rishighan/threetwo typescript --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rishighan/threetwo.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/typescript .cursor/skills/typescript && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "typescript" agent skill from https://github.com/rishighan/threetwo/tree/main/.claude/skills/typescript into .cursor/skills/typescript/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "typescript", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/rishighan/threetwo.git --path .claude/skills/typescript--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add rishighan/threetwo --skill typescript -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install rishighan/threetwo typescript --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rishighan/threetwo.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/typescript .gemini/skills/typescript && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "typescript" agent skill from https://github.com/rishighan/threetwo/tree/main/.claude/skills/typescript into .gemini/skills/typescript/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "typescript", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install rishighan/threetwo typescriptInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add rishighan/threetwo --skill typescript -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/rishighan/threetwo.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/typescript .github/skills/typescript && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "typescript" agent skill from https://github.com/rishighan/threetwo/tree/main/.claude/skills/typescript into .github/skills/typescript/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "typescript", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rishighan/threetwo --skill typescript -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install rishighan/threetwo typescript --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rishighan/threetwo.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/typescript .opencode/skills/typescript && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "typescript" agent skill from https://github.com/rishighan/threetwo/tree/main/.claude/skills/typescript into .opencode/skills/typescript/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "typescript", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
typescriptTypeScript engineering guidelines based on Google's style guide.
Typescript is an agent skill from rishighan/threetwo. TypeScript engineering guidelines based on Google's style guide. Use when writing, reviewing, or refactoring TypeScript code in this project.
Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Refactoring. It works with TypeScript. The repository describes itself as: A good comic book curation app. The licence is MIT.
Read from SKILL.md and the folder at commit 5211137. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Typescript loads about 2k tokens when it runs. Until then it costs about 38 tokens; SKILL.md has 930 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from rishighan/threetwo at commit 5211137, republished under its MIT licence (© rishighan). 930 words, ~2,019 tokens.
.claude/skills/typescript/SKILL.md (or your agent's skills folder).Comprehensive guidelines for writing production-quality TypeScript based on Google's TypeScript Style Guide. Naming Conventions Type Convention Example Classes, Interfaces, Types, Enums UpperCamelCase UserService, HttpClient Variables, Parameters, Functions lowerCamelCase userName, processData Global Constants, Enum Values CONSTANT_CASE MAX_RETRIES, Status.ACTIVE Type Parameters Single letter or UpperCamelCase T, ResponseType Naming Principles
Descriptive names, avoid ambiguous abbreviations
Treat acronyms as words: loadHttpUrl not loadHTTPURL
No prefixes like opt_ for optional parameters
No trailing underscores for private properties
Single-letter variables only when scope is <10 linesVariable Declarations
// Always use const by default const users = getUsers();
// Use let only when reassignment is needed let count = 0; count++;
// Never use var // var x = 1; // WRONG
// One variable per declaration const a = 1; const b = 2; // const a = 1, b = 2; // WRONG
Types and Interfaces Prefer Type Aliases Over Interfaces
// Good: type alias for object shapes type User = { id: string; name: string; email?: string; };
// Avoid: interface for object shapes // interface User { // id: string; // name: string; // }
// Type aliases work for everything: objects, unions, intersections, mapped types type Status = 'active' | 'inactive'; type Combined = TypeA & TypeB; type Handler = (event: Event) => void;
// Benefits of types over interfaces: // 1. Consistent syntax for all type definitions // 2. Cannot be merged/extended unexpectedly (no declaration merging) // 3. Better for union types and computed properties // 4. Works with utility types more naturally
Type Inference
Leverage inference for trivially inferred types:
// Good: inference is clear const name = 'Alice'; const items = [1, 2, 3];
// Good: explicit for complex expressions const result: ProcessedData = complexTransformation(input);
Array Types
// Simple types: use T[] const numbers: number[]; const names: readonly string[];
// Multi-dimensional: use T[][] const matrix: number[][];
// Complex types: use Array<T>
const handlers: Array<(event: Event) => void>;
Null and Undefined
// Prefer optional fields over union with undefined interface Config { timeout?: number; // Good // timeout: number | undefined; // Avoid }
// Type aliases must NOT include |null or |undefined type UserId = string; // Good // type UserId = string | null; // WRONG
// May use == for null comparison (catches both null and undefined) if (value == null) { // handles both null and undefined }
Types to Avoid
// Avoid any - use unknown instead function parse(input: unknown): Data { }
// Avoid {} - use unknown, Record<string, T>, or object function process(obj: Record<string, unknown>): void { }
// Use lowercase primitives let name: string; // Good // let name: String; // WRONG
// Never use wrapper objects // new String('hello') // WRONG
Classes Structure
class UserService { // Fields first, initialized where declared private readonly cache = new Map<string, User>(); private lastAccess: Date | null = null;
// Constructor with parameter properties constructor( private readonly api: ApiClient, private readonly logger: Logger, ) {}
// Methods separated by blank lines
async getUser(id: string): Promise<User> {
// ...
}
private validateId(id: string): boolean { // ... } }
Visibility
class Example { // private by default, only use public when needed externally private internalState = 0;
// readonly for properties never reassigned after construction readonly id: string;
// Never use #private syntax - use TypeScript visibility // #field = 1; // WRONG private field = 1; // Good }
Avoid Arrow Functions as Properties
class Handler { // Avoid: arrow function as property // handleClick = () => { ... };
// Good: instance method handleClick(): void { // ... } }
// Bind at call site if needed element.addEventListener('click', () => handler.handleClick());
Static Methods
Never use this in static methods
Call on defining class, not subclassesFunctions Prefer Function Declarations
// Good: function declaration for named functions function processData(input: Data): Result { return transform(input); }
// Arrow functions when type annotation needed const handler: EventHandler = (event) => { // ... };
Arrow Function Bodies
// Concise body only when return value is used const double = (x: number) => x * 2;
// Block body when return should be void const log = (msg: string) => { console.log(msg); };
Parameters
// Use rest parameters, not arguments function sum(...numbers: number[]): number { return numbers.reduce((a, b) => a + b, 0); }
// Destructuring for multiple optional params interface Options { timeout?: number; retries?: number; } function fetch(url: string, { timeout = 5000, retries = 3 }: Options = {}) { // ... }
// Never name a parameter 'arguments'
Imports and Exports Always Use Named Exports
// Good: named exports export function processData() { } export class UserService { } export interface Config { }
// Never use default exports // export default class UserService { } // WRONG
Import Styles
// Module import for large APIs import * as fs from 'fs';
// Named imports for frequently used symbols import { readFile, writeFile } from 'fs/promises';
// Type-only imports when only used as types import type { User, Config } from './types';
Module Organization
Use modules, never namespace Foo { }
Never use require() - use ES6 imports
Use relative imports within same project
Avoid excessive ../../../Control Structures Always Use Braces
// Good if (condition) { doSomething(); }
// Exception: single-line if if (condition) return early;
Loops
// Prefer for...of for arrays for (const item of items) { process(item); }
// Use Object methods with for...of for objects for (const [key, value] of Object.entries(obj)) { // ... }
// Never use unfiltered for...in on arrays
Equality
// Always use === and !== if (a === b) { }
// Exception: == null catches both null and undefined if (value == null) { }
Switch Statements
switch (status) { case Status.Active: handleActive(); break; case Status.Inactive: handleInactive(); break; default: // Always include default, even if empty break; }
Exception Handling
// Always throw Error instances throw new Error('Something went wrong'); // throw 'error'; // WRONG
// Catch with unknown type try { riskyOperation(); } catch (e: unknown) { if (e instanceof Error) { logger.error(e.message); } throw e; }
// Empty catch needs justification comment try { optional(); } catch { // Intentionally ignored: fallback behavior handles this }
Type Assertions
// Use 'as' syntax, not angle brackets
const input = value as string;
// const input = <string>value; // WRONG in TSX, avoid everywhere
// Double assertion through unknown when needed const config = (rawData as unknown) as Config;
// Add comment explaining why assertion is safe const element = document.getElementById('app') as HTMLElement; // Safe: element exists in index.html
Strings
// Use single quotes for string literals const name = 'Alice';
// Template literals for interpolation or multiline
const message = Hello, ${name}!;
const query = SELECT * FROM users WHERE id = ?;
// Never use backslash line continuations
Disallowed Features Feature Alternative var const or let Array() constructor [] literal Object() constructor {} literal any type unknown namespace modules require() import Default exports Named exports #private fields private modifier eval() Never use const enum Regular enum debugger Remove before commit with Never use Prototype modification Never modify
© rishighan, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/typescript of rishighan/threetwo.
Open the folder on GitHubat commit 5211137
Typescript next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Typescript this skillrishighan/threetwo | 110 | — | ~2k | Automated safety check: Pass | MIT | |
| Deepgram SDK Patternsjeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~2.2k | Automated safety check: Pass | MIT | |
| Svelte5 Best PracticesSikandarJODD/cnblocks | 430 | 1 repos | ~810 | Automated safety check: Pass | MIT | |
| Dinero Best Practicesdinerojs/dinero.js | 6.8k | — | ~756 | Automated safety check: Pass | MIT | |
| Code Guidelinesgetsentry/sentry-react-native | 1.8k | — | ~3.2k | Automated safety check: Pass | MIT | |
| AST Visitor Pattern for Unionsprisma/orm | 48k | — | ~830 | Automated safety check: Pass | Apache-2.0 |
jeremylongshore/tons-of-skills-marketplace
Apply production-ready Deepgram SDK patterns for TypeScript and Python.
SikandarJODD/cnblocks
Svelte 5 runes, snippets, SvelteKit patterns, and modern best practices for TypeScript and component development.
dinerojs/dinero.js
Core best practices for the Dinero.js money library. An agent skill from dinerojs/dinero.js.
getsentry/sentry-react-native
Enforce Sentry React Native SDK code guidelines for implementation, refactoring, and review.
prisma/orm
Replaces a plain TypeScript union plus switch statements with frozen subclasses and a visitor interface when several places dispatch on the same variants.
warp-drive-data/warp-drive
Reference for writing and debugging TypeScript and JavaScript codemods with @ast-grep/napi: parsing, node queries, meta-variables, rule objects and editing.
rishighan/threetwo
Commenting and documentation guidelines. An agent skill from rishighan/threetwo.
Works with
TypeScript engineering guidelines based on Google's style guide. Typescript is an agent skill from rishighan/threetwo. TypeScript engineering guidelines based on Google's style guide.
Typescript fits situations like: refactoring TypeScript code in this project; tasks that involve Refactoring.
Run `npx skills add rishighan/threetwo --skill typescript -a claude-code`. Or copy the skill folder (.claude/skills/typescript in rishighan/threetwo) into .claude/skills/typescript in your project. Claude Code loads it when a task matches its description.
Run `npx skills add rishighan/threetwo --skill typescript -a codex`. Or copy the skill folder (.claude/skills/typescript in rishighan/threetwo) into .agents/skills/typescript in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rishighan/threetwo --skill typescript -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/typescript, .gemini/skills/typescript, .github/skills/typescript and .opencode/skills/typescript in your project.
SKILL.md names no scripts, command-line tools or credentials: Typescript is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Typescript is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2k tokens (SKILL.md is roughly 8.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Typescript: Deepgram SDK Patterns (jeremylongshore/tons-of-skills-marketplace, 2.8k stars), Svelte5 Best Practices (SikandarJODD/cnblocks, 430 stars), Dinero Best Practices (dinerojs/dinero.js, 6.8k stars) and Code Guidelines (getsentry/sentry-react-native, 1.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
rishighan (a GitHub user) maintains it in rishighan/threetwo, which has 110 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 6, 2026.
Source: rishighan/threetwo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.