Solid
ramziddin/solid-skills
A skill your agent uses when writing code, implementing features, refactoring, planning architecture, designing systems, reviewing code, or debugging.
A skill your agent uses when reviewing code for quality, naming a class or function, choosing a design pattern, refactoring a code smell, or establishing coding conventions for a new project.
$ npx skills add kid-sid/claude-spellbook --skill coding-standards -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kid-sid/claude-spellbook coding-standards --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/kid-sid/claude-spellbook.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/coding-standards .claude/skills/coding-standards && 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 "coding-standards" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/coding-standards into .claude/skills/coding-standards/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-standards", 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/kid-sid/claude-spellbook/tree/main/skills/coding-standardsType 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 kid-sid/claude-spellbook --skill coding-standards -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kid-sid/claude-spellbook coding-standards --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/coding-standards .agents/skills/coding-standards && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "coding-standards" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/coding-standards into .agents/skills/coding-standards/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-standards", 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 kid-sid/claude-spellbook --skill coding-standards -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kid-sid/claude-spellbook coding-standards --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/coding-standards .cursor/skills/coding-standards && 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 "coding-standards" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/coding-standards into .cursor/skills/coding-standards/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-standards", 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/kid-sid/claude-spellbook.git --path skills/coding-standards--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 kid-sid/claude-spellbook --skill coding-standards -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kid-sid/claude-spellbook coding-standards --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/coding-standards .gemini/skills/coding-standards && 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 "coding-standards" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/coding-standards into .gemini/skills/coding-standards/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-standards", 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 kid-sid/claude-spellbook coding-standardsInstalls 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 kid-sid/claude-spellbook --skill coding-standards -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/coding-standards .github/skills/coding-standards && 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 "coding-standards" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/coding-standards into .github/skills/coding-standards/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-standards", 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 kid-sid/claude-spellbook --skill coding-standards -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kid-sid/claude-spellbook coding-standards --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/coding-standards .opencode/skills/coding-standards && 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 "coding-standards" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/coding-standards into .opencode/skills/coding-standards/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-standards", 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.
coding-standardsA skill your agent uses when reviewing code for quality, naming a class or function, choosing a design pattern, refactoring a code smell, or establishing coding conventions for a new project.
Coding Standards is an agent skill from kid-sid/claude-spellbook. Use when reviewing code for quality, naming a class or function, choosing a design pattern, refactoring a code smell, or establishing coding conventions for a new project.
Its SKILL.md is about 4.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 Code quality, Refactoring and Design patterns. The repository describes itself as: A curated collection of skills, prompts, and workflows that extend Claude's capabilities — your personal grimoire for AI-powered development. The licence is MIT.
Read from SKILL.md and the folder at commit a7c2ac9. 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 (its code samples are typescript, python and go).
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.
Coding Standards loads about 4.2k tokens when it runs. Until then it costs about 47 tokens; SKILL.md has 824 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 kid-sid/claude-spellbook at commit a7c2ac9, republished under its MIT licence (© kid-sid). 824 words, ~4,166 tokens.
.claude/skills/coding-standards/SKILL.md (or your agent's skills folder).A comprehensive reference for writing clean, consistent, maintainable code across Python, TypeScript, and Go.
| Construct | Python | TypeScript | Go |
|---|---|---|---|
| Variables | snake_case | camelCase | camelCase |
| Functions / methods | snake_case | camelCase | PascalCase (exported), camelCase (unexported) |
| Classes / types | PascalCase | PascalCase | PascalCase |
| Constants | UPPER_SNAKE_CASE | UPPER_SNAKE_CASE or camelCase | PascalCase (exported), camelCase (unexported) |
| Interfaces | N/A | IFoo (avoid) or just Foo (preferred) | Foo (no I prefix) |
| Files | snake_case.py | kebab-case.ts or camelCase.ts | snake_case.go |
| Test files | test_*.py | *.test.ts / *.spec.ts | *_test.go |
user_registration_date not date; payment_amount_cents not amountUserManager, DataHelper, Utils — what does it manage/help/do?is_, has_, can_, should_ prefix: is_active, has_permissioncalculate_tax(), send_email(), validate_schema()id, url, http, db)i is fine; module-level variable needs a full name# BAD
def proc(d, f):
temp = d * f
return temp
# GOOD
def calculate_discounted_price(base_price: float, discount_factor: float) -> float:
return base_price * discount_factorA class should have one reason to change.
// BAD — UserService does everything
class UserService {
createUser(data: CreateUserDto) { /* ... */ }
sendWelcomeEmail(user: User) { /* ... */ } // email is a separate concern
generateReport(users: User[]) { /* ... */ } // reporting is a separate concern
}
// GOOD — separated concerns
class UserService { createUser(data: CreateUserDto) { /* ... */ } }
class EmailService { sendWelcomeEmail(user: User) { /* ... */ } }
class UserReportService { generateReport(users: User[]) { /* ... */ } }Open for extension, closed for modification.
// BAD — must modify to add new discount type
function calculateDiscount(type: string, price: number): number {
if (type === 'student') return price * 0.8;
if (type === 'senior') return price * 0.75;
// must add else-if here for each new type
}
// GOOD — extend by adding a new class
interface DiscountStrategy { apply(price: number): number; }
class StudentDiscount implements DiscountStrategy { apply(p: number) { return p * 0.8; } }
class SeniorDiscount implements DiscountStrategy { apply(p: number) { return p * 0.75; } }Subtypes must be substitutable for their base type.
// BAD — Square overrides setWidth/setHeight inconsistently, breaking Rectangle contract
class Rectangle {
constructor(protected width: number, protected height: number) {}
setWidth(w: number) { this.width = w; }
setHeight(h: number) { this.height = h; }
area() { return this.width * this.height; }
}
class Square extends Rectangle {
setWidth(w: number) { this.width = this.height = w; } // violates LSP
setHeight(h: number) { this.width = this.height = h; } // caller expects independent dims
}
// GOOD — model separately; share via interface if needed
interface Shape { area(): number; }
class Rectangle implements Shape {
constructor(private w: number, private h: number) {}
area() { return this.w * this.h; }
}
class Square implements Shape {
constructor(private side: number) {}
area() { return this.side * this.side; }
}Many specific interfaces are better than one general interface.
// BAD — not all workers can eat or sleep
interface Worker { work(): void; eat(): void; sleep(): void; }
// GOOD — split by capability
interface Workable { work(): void; }
interface Feedable { eat(): void; }
interface Restable { sleep(): void; }
class HumanWorker implements Workable, Feedable, Restable {
work() { /* ... */ }
eat() { /* ... */ }
sleep() { /* ... */ }
}
class RobotWorker implements Workable {
work() { /* ... */ }
}Depend on abstractions, not concretions.
// BAD — tightly coupled to PostgresDB
class UserRepository {
private db = new PostgresDB(); // concrete dependency
find(id: string) { return this.db.query(/* ... */); }
}
// GOOD — depends on interface, injected
interface Database { query(sql: string, params: unknown[]): Promise<unknown[]>; }
class UserRepository {
constructor(private db: Database) {}
find(id: string) { return this.db.query('SELECT * FROM users WHERE id = $1', [id]); }
}| Pattern | Category | One-line use case | When to avoid |
|---|---|---|---|
| Factory | Creational | Create objects without specifying concrete class | When you only have one type |
| Abstract Factory | Creational | Create families of related objects | Overkill for simple factories |
| Singleton | Creational | One shared instance (config, logger) | When it becomes global mutable state |
| Builder | Creational | Step-by-step construction of complex objects | Simple objects with few fields |
| Strategy | Behavioral | Swap algorithms at runtime | When you only have one algorithm |
| Observer | Behavioral | Notify dependents when state changes | When observers outlive the subject |
| Command | Behavioral | Encapsulate a request as an object (undo/redo) | Simple one-off calls |
| Template Method | Behavioral | Define skeleton, let subclasses fill steps | Deep inheritance hierarchies |
| Repository | Structural | Isolate data access from domain logic | When ORM already provides this |
| Adapter | Structural | Wrap incompatible interface | When both interfaces are yours (just fix one) |
| Decorator | Structural | Add behavior to objects dynamically | When subclassing is simpler |
| Facade | Structural | Simplified interface to complex subsystem | Over-used to hide bad design |
interface Logger { log(msg: string): void; }
class ConsoleLogger implements Logger { log(msg: string) { console.log(msg); } }
class FileLogger implements Logger { log(msg: string) { fs.appendFileSync('app.log', msg); } }
function createLogger(type: 'console' | 'file'): Logger {
if (type === 'console') return new ConsoleLogger();
return new FileLogger();
}
// Usage
const logger = createLogger('console');
logger.log('Server started');interface SortStrategy { sort(data: number[]): number[]; }
class QuickSort implements SortStrategy { sort(d: number[]) { /* quicksort impl */ return d; } }
class MergeSort implements SortStrategy { sort(d: number[]) { /* mergesort impl */ return d; } }
class DataSorter {
constructor(private strategy: SortStrategy) {}
sort(data: number[]) { return this.strategy.sort(data); }
setStrategy(strategy: SortStrategy) { this.strategy = strategy; }
}
// Swap strategy at runtime
const sorter = new DataSorter(new QuickSort());
sorter.setStrategy(new MergeSort());
sorter.sort([5, 3, 1, 4, 2]);type Listener<T> = (event: T) => void;
class EventEmitter<T> {
private listeners: Listener<T>[] = [];
subscribe(fn: Listener<T>) { this.listeners.push(fn); }
unsubscribe(fn: Listener<T>) { this.listeners = this.listeners.filter(l => l !== fn); }
emit(event: T) { this.listeners.forEach(fn => fn(event)); }
}
const orderEvents = new EventEmitter<{ orderId: string; status: string }>();
orderEvents.subscribe(({ orderId }) => sendConfirmationEmail(orderId));
orderEvents.subscribe(({ orderId }) => updateInventory(orderId));
orderEvents.emit({ orderId: '123', status: 'paid' });interface UserRepository {
findById(id: string): Promise<User | null>;
save(user: User): Promise<void>;
delete(id: string): Promise<void>;
}
class PostgresUserRepository implements UserRepository {
constructor(private db: Database) {}
async findById(id: string): Promise<User | null> {
const [row] = await this.db.query('SELECT * FROM users WHERE id = $1', [id]);
return row ? User.fromRow(row) : null;
}
async save(user: User): Promise<void> {
await this.db.query(
'INSERT INTO users (id, email) VALUES ($1, $2) ON CONFLICT (id) DO UPDATE SET email = $2',
[user.id, user.email]
);
}
async delete(id: string): Promise<void> {
await this.db.query('DELETE FROM users WHERE id = $1', [id]);
}
}| Smell | Symptom | Refactoring |
|---|---|---|
| Long Method | Function > 30 lines | Extract Method |
| Long Class / God Class | Class > 300 lines or too many responsibilities | Extract Class |
| Data Clump | Same 3+ params appear together everywhere | Introduce Parameter Object |
| Primitive Obsession | Using strings/ints for domain concepts (money, email) | Introduce Value Object |
| Feature Envy | Method uses data from another class more than its own | Move Method |
| Shotgun Surgery | One change requires edits in many classes | Move Method/Field, consolidate |
| Divergent Change | Class changes for multiple unrelated reasons | Extract Class |
| Duplicate Code | Same logic in multiple places | Extract Method/Function |
| Magic Numbers | Unexplained literals in code | Replace with Named Constant |
| Switch/Match on Type | Repeated instanceof or type checks | Replace with Polymorphism |
// BAD — Primitive Obsession: money is a raw number, email is a raw string
function chargeUser(userId: string, amount: number, email: string) { /* ... */ }
// GOOD — Value Objects carry their own validation and behaviour
class Money {
constructor(readonly cents: number, readonly currency: 'USD' | 'EUR') {
if (cents < 0) throw new Error('Money cannot be negative');
}
}
class Email {
constructor(readonly value: string) {
if (!value.includes('@')) throw new Error('Invalid email');
}
}
function chargeUser(userId: string, amount: Money, email: Email) { /* ... */ }// BAD — Magic Numbers
if (user.age >= 65) applyDiscount(price * 0.25);
// GOOD — Named Constants
const SENIOR_AGE_THRESHOLD = 65;
const SENIOR_DISCOUNT_RATE = 0.25;
if (user.age >= SENIOR_AGE_THRESHOLD) applyDiscount(price * SENIOR_DISCOUNT_RATE);# Dataclass instead of verbose __init__
from dataclasses import dataclass, field
@dataclass
class Order:
id: str
items: list[str] = field(default_factory=list)
total: float = 0.0
# Context manager for resource management
with open('file.txt') as f:
data = f.read() # file auto-closed, even on exception
# Generator for memory-efficient processing
def process_large_file(path: str):
with open(path) as f:
for line in f: # reads line-by-line, not all into memory
yield parse(line)
# Walrus operator for readability
if (match := pattern.search(text)) is not None:
print(match.group(0))
# BAD — unpacking ignored with throwaway names
result = get_user_and_role()
user = result[0]
role = result[1]
# GOOD — structured unpacking
user, role = get_user_and_role()// Discriminated union — exhaustive type narrowing
type Result<T> =
| { success: true; data: T }
| { success: false; error: string };
function handleResult<T>(result: Result<T>) {
if (result.success) {
console.log(result.data); // TypeScript knows this is T
} else {
console.error(result.error); // TypeScript knows this is string
}
}
// satisfies — validate type without widening
const config = {
host: 'localhost',
port: 5432,
} satisfies Record<string, string | number>;
// config.host is still `string` (not widened to `string | number`)
// Utility types
type PartialUser = Partial<User>; // all fields optional
type ReadonlyUser = Readonly<User>; // all fields readonly
type UserPreview = Pick<User, 'id' | 'name'>; // subset of fields
type UserWithoutPassword = Omit<User, 'password'>; // exclude field
// BAD — casting away the type
const user = response.data as any;
// GOOD — parse and validate at the boundary
import { z } from 'zod';
const UserSchema = z.object({ id: z.string(), name: z.string() });
const user = UserSchema.parse(response.data);// Functional options pattern — flexible, forward-compatible constructors
type Server struct {
host string
port int
timeout time.Duration
}
type Option func(*Server)
func WithTimeout(d time.Duration) Option {
return func(s *Server) { s.timeout = d }
}
func NewServer(host string, port int, opts ...Option) *Server {
s := &Server{host: host, port: port, timeout: 30 * time.Second}
for _, opt := range opts {
opt(s)
}
return s
}
// Usage
srv := NewServer("localhost", 8080, WithTimeout(5*time.Second))
// Error wrapping — preserve context, enable errors.Is / errors.As
if err := db.Query(); err != nil {
return fmt.Errorf("fetching user %s: %w", userID, err)
}
// Table-driven tests — idiomatic Go
func TestAdd(t *testing.T) {
cases := []struct{ a, b, want int }{
{1, 2, 3},
{0, 0, 0},
{-1, 1, 0},
}
for _, tc := range cases {
t.Run(fmt.Sprintf("%d+%d", tc.a, tc.b), func(t *testing.T) {
got := Add(tc.a, tc.b)
if got != tc.want {
t.Errorf("got %d, want %d", got, tc.want)
}
})
}
}Manager, Helper, or Utils suffix — a class named UserManager with 15 methods is a single-responsibility violation waiting to be split; name by what it does, not that it manages thingssend_email(user, urgent=True) means two functions in disguise; split into send_urgent_email and send_email with distinct call sitesNone on error instead of raising an exception or returning a typed Result — callers silently ignore None and propagate nulls deep into the call stack before crashing; be explicit about failureexcept Exception: logger.error(...) hides failures silently; catch the specific exception type and let unexpected ones propagateany type in TypeScript at a module boundary — any disables type checking for every caller downstream; use unknown and narrow explicitly, or define a proper interfacedef process(items=[]) shares the same list across all calls; use def process(items=None) and initialize inside the function bodysnake_case / camelCase / PascalCase per language)is_ / has_ / can_ prefix© kid-sid, 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 skills/coding-standards of kid-sid/claude-spellbook.
Open the folder on GitHubat commit a7c2ac9
Coding Standards 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 |
|---|---|---|---|---|---|---|
| Coding Standards this skillkid-sid/claude-spellbook | 189 | — | ~4.2k | Automated safety check: Pass | MIT | |
| Solidramziddin/solid-skills | 606 | — | ~2.7k | Automated safety check: Pass | None | |
| Omni DevGulajavaMinistudio/Mayukai-Theme | 139 | — | ~736 | Automated safety check: Pass | MIT | |
| Brooks Reviewhyhmrright/brooks-lint | 1.5k | 1 repos | ~430 | Automated safety check: Pass | MIT | |
| Clean Codejd-solanki/slidev-theme-dracula | 161 | 1 repos | ~3.8k | Automated safety check: Pass | MIT | |
| Uncle Bob Craftsickn33/agentic-awesome-skills | 47k | 2 repos | ~2.6k | Automated safety check: Pass | MIT |
ramziddin/solid-skills
A skill your agent uses when writing code, implementing features, refactoring, planning architecture, designing systems, reviewing code, or debugging.
GulajavaMinistudio/Mayukai-Theme
Omni-expert principal software architect. An agent skill from GulajavaMinistudio/Mayukai-Theme.
hyhmrright/brooks-lint
PR code review that surfaces decay risks, design smells, and maintainability issues with concrete Symptom → Source → Consequence → Remedy findings, drawing on twelve classic engineering books.
jd-solanki/slidev-theme-dracula
Write readable, maintainable code through disciplined naming, small functions, and clean error handling.
sickn33/agentic-awesome-skills
A skill your agent uses when performing code review, writing or refactoring code, or discussing architecture; complements clean-code and does not replace project linter/formatter.
GulajavaMinistudio/Mayukai-Theme
Language-agnostic workflow for code reviews and security audits against Clean Code/SOLID principles, generating formal refactoring plans.
kid-sid/claude-spellbook
A skill your agent uses when building or reviewing UI components for keyboard and screen reader compatibility, adding ARIA to custom widgets, auditing a page for WCAG AA conformance, or preparing…
kid-sid/claude-spellbook
A skill your agent uses when building, wiring, or debugging an Agentex agent — choosing agent type, configuring acp.py and manifest.yaml, using adk.messages or adk.state, or resolving…
kid-sid/claude-spellbook
A skill your agent uses when building production LLM applications — designing RAG pipelines, choosing vector databases, implementing agent orchestration, optimizing cost, or adding AI safety…
kid-sid/claude-spellbook
A skill your agent uses when building or refactoring Angular applications — choosing between signals, RxJS, and NgRx for state, configuring routing with guards and lazy loading, optimizing change…
kid-sid/claude-spellbook
A skill your agent uses when designing new REST endpoints, reviewing an existing API contract, adding pagination or filtering, planning a versioning strategy, or building a public or partner-facing…
kid-sid/claude-spellbook
A skill your agent uses when implementing login flows, issuing or validating JWTs, setting up OAuth2/OIDC with a provider, designing role-based or attribute-based access control, securing API…
Categories
A skill your agent uses when reviewing code for quality, naming a class or function, choosing a design pattern, refactoring a code smell, or establishing coding conventions for a new project. Coding Standards is an agent skill from kid-sid/claude-spellbook. Use when reviewing code for quality, naming a class or function, choosing a design pattern, refactoring a code smell, or establishing coding conventions for a new project.
Coding Standards fits situations like: reviewing code for quality; choosing a design pattern; refactoring a code smell; establishing coding conventions for a new project.
Run `npx skills add kid-sid/claude-spellbook --skill coding-standards -a claude-code`. Or copy the skill folder (skills/coding-standards in kid-sid/claude-spellbook) into .claude/skills/coding-standards in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kid-sid/claude-spellbook --skill coding-standards -a codex`. Or copy the skill folder (skills/coding-standards in kid-sid/claude-spellbook) into .agents/skills/coding-standards 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 kid-sid/claude-spellbook --skill coding-standards -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/coding-standards, .gemini/skills/coding-standards, .github/skills/coding-standards and .opencode/skills/coding-standards in your project.
SKILL.md names no scripts, command-line tools or credentials: Coding Standards is instructions for the agent only. Our summary lists: Python 3.
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.
Coding Standards is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k 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 Coding Standards: Solid (ramziddin/solid-skills, 606 stars), Omni Dev (GulajavaMinistudio/Mayukai-Theme, 139 stars), Brooks Review (hyhmrright/brooks-lint, 1.5k stars) and Clean Code (jd-solanki/slidev-theme-dracula, 161 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kid-sid (a GitHub user) maintains it in kid-sid/claude-spellbook, which has 189 GitHub stars. The repository holds 54 skills in this directory. The repository was last updated on August 5, 2026.
Source: kid-sid/claude-spellbook on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.