typescript-patterns

A collection of security guidance for Electron and web applications. Electron is a framework for building desktop apps with web technologies.

In plain words
What is it for?
It helps implement authentication, validate and sanitize input, protect against attacks such as cross-site scripting and request forgery, manage API keys, and configure Electron securely.
Why use it?
It helps reduce common risks when handling logins, user-provided data, secrets, external data, and application permissions.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/macromania/agentop/typescript-patterns
Any agent
npx skills add macromania/agentop --skill typescript-patterns
Clone the repo
git clone --depth 1 https://github.com/macromania/agentop

Made for: Claude Code, Codex.

Per session 55 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,587 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00055 $0.02587
Opus 5 $0.00028 $0.01293
Sonnet 5 $0.00011 $0.00517
Haiku 4.5 $0.00006 $0.00259

Measured 2d ago against content hash c0712cba8311, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

typescript-patterns scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.github/skills/typescript-patterns/SKILL.md · 429 lines

How it starts

The opening of the file, as written. The whole thing — 429 lines — stays where its author put it; the contents beside it link to each section on GitHub.

TypeScript Best Practices

Modern TypeScript patterns for type-safe, maintainable code with maximum developer experience.

When to Use This Skill

  • Designing interfaces and types
  • Working with generics
  • Creating type-safe APIs
  • Implementing type guards
  • Building utility types

Core Principles

Use TypeScript Strict Mode

// tsconfig.json
{
  "compilerOptions": {
    "strict": true,
    "noUncheckedIndexedAccess": true,
    "exactOptionalPropertyTypes": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true
  }
}

Prefer interface for Objects

// ✅ GOOD: Interface for object shapes
interface Task {
  id: string;
  title: string;
  status: TaskStatus;
}

// ✅ GOOD: Type for unions, primitives, utilities
type TaskStatus = 'pending' | 'active' | 'completed';
type TaskId = string;
type TaskRecord = Record<string, Task>;

// Interface can be extended
interface TimestampedTask extends Task {
  createdAt: Date;
  updatedAt: Date;
}

Make Invalid States Unrepresentable

// ❌ BAD: Allows invalid states
interface Session {
  status: 'idle' | 'running' | 'completed' | 'error';
  startedAt?: Date;
  completedAt?: Date;
  error?: Error;
  result?: SessionResult;
}
// Can have error with status 'completed', result with status 'idle', etc.

// ✅ GOOD: Discriminated union - each state is explicit
type Session = 
  | { status: 'idle' }
  | { status: 'running'; startedAt: Date }
  | { status: 'completed'; startedAt: Date; completedAt: Date; result: SessionResult }
  | { status: 'error'; startedAt: Date; error: Error };

// TypeScript enforces correct fields for each state
function handleSession(session: Session) {
  switch (session.status) {
    case 'idle':
      // Only idle-specific fields available
      return 'Ready to start';
      
    case 'running':
      // startedAt is guaranteed to exist
      return `Running since ${session.startedAt.toISOString()}`;
      
    case 'completed':
      // result is guaranteed to exist
      return `Completed: ${session.result.summary}`;
      
    case 'error':
      // error is guaranteed to exist
      return `Error: ${session.error.message}`;
  }
}

Read the full file on GitHub · 429 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 429 lines · 55 tokens per session scan A c0712cba8311

Subscribe to this mod's changes

typescript-patterns is a skill published in the GitHub repository macromania/agentop (10 stars, last pushed 5mo ago), licensed MIT. It adds 55 tokens to every session and 2,587 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.