angular-architecture — скилл для Claude Code: структура
Скилл задаёт правила, куда класть компоненты Angular, как называть файлы и что менять в официальном стайлгайде.
npx skills add Gentleman-Programming/Gentleman-Skills --skill angular-architecture -a claude-code
npx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a claude-codeЧто делает angular-architecture
Скилл описывает Scope Rule: место компонента зависит от того, кто его использует. Если компонент нужен одной фиче — он живёт в features/[feature]/components/. Если его тянут две фичи и больше — переезжает в features/shared/components/. Внутри фичи рядом лежат services/ и models/, а core/ держит синглтоны уровня приложения: сервисы, интерцепторы, гарды.
Отдельный пункт — имена файлов. Суффиксы .component, .service, .model скилл запрещает: папка уже говорит, что это. То есть user-profile.ts вместо user-profile.component.ts. Из официального стайлгайда берётся inject() вместо инъекции через конструктор, привязки class и style вместо ngClass/ngStyle, protected для членов, нужных только шаблону, readonly для inputs, outputs и queries.
Скилл расходится с официальными доками Angular именно в именовании файлов, и это стоит проговорить с командой до установки, иначе ревью превратится в спор. Внутри есть готовые команды ng для генерации компонента, сервиса и гарда сразу в нужную папку.
Какие задачи решает
- решить, в какую папку положить новый компонент
- разложить фичи, shared и core по одному шаблону
- убрать суффиксы
.componentи.serviceиз имён файлов - перевести компоненты на
inject()и сигналы - сгенерировать компонент или гард сразу в нужной директории
Примеры запросов агенту
- Помоги разложить компоненты корзины и чекаута по структуре проекта
- Куда положить
button.ts, если его используют корзина и чекаут? - Сгенерируй сервис для фичи products по правилам скилла
Как установить angular-architecture
1Через Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill angular-architecture -a claude-codenpx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a claude-code2Вручную: положить файлы
~/.claude/skills/architecture/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/architecture/
1Через Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a codex2Вручную: положить файлы
.agents/skills/architecture/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a cursor2Вручную: положить файлы
.cursor/skills/architecture/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install Gentleman-Programming/Gentleman-Skills architecture2Вручную: положить файлы
.github/skills/architecture/SKILL.md1Через Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a gemini-cli2Командой платформы
gemini skills install https://github.com/Gentleman-Programming/Gentleman-Skills --path curated/angular/architectureВручную: положить файлы
.devin/skills/architecture/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill architecture -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о angular-architecture
Как установить angular-architecture в Claude?
Выполните npx skills add Gentleman-Programming/Gentleman-Skills --skill angular-architecture -a claude-code. Файл скилла окажется в ~/.claude/skills/architecture/SKILL.md.
Что делает angular-architecture?
Задаёт структуру Angular-проекта: Scope Rule для размещения компонентов, раскладку features/shared/core, правила именования файлов и набор соглашений из официального стайлгайда.
Чем этот скилл отличается от официального стайлгайда Angular?
Он следует официальным правилам, но переопределяет именование файлов: суффиксы .component, .service и .model не используются, потому что контекст задаёт папка.
Исходный текст
SKILL.md · MIT
---
name: angular-architecture
description: >
Angular architecture: Scope Rule, project structure, file naming, style guide.
Trigger: When structuring Angular projects or deciding where to place components.
metadata:
author: gentleman-programming
version: "1.0"
---
## The Scope Rule (REQUIRED)
**"Scope determines structure"** - Where a component lives depends on its usage.
| Usage | Placement |
|-------|-----------|
| Used by 1 feature | `features/[feature]/components/` |
| Used by 2+ features | `features/shared/components/` |
### Example
```
features/
shopping-cart/
shopping-cart.ts # Main component = feature name
components/
cart-item.ts # Used ONLY by shopping-cart
cart-summary.ts # Used ONLY by shopping-cart
checkout/
checkout.ts
components/
payment-form.ts # Used ONLY by checkout
shared/
components/
button.ts # Used by shopping-cart AND checkout
modal.ts # Used by multiple features
```
---
## Project Structure
```
src/app/
features/
[feature-name]/
[feature-name].ts # Main component (same name as folder)
components/ # Feature-specific components
services/ # Feature-specific services
models/ # Feature-specific types
shared/ # ONLY for 2+ feature usage
components/
services/
pipes/
core/ # App-wide singletons
services/
interceptors/
guards/
app.ts
app.config.ts
routes.ts
main.ts
```
---
## File Naming (REQUIRED)
No `.component`, `.service`, `.model` suffixes. The folder tells you what it is.
```
✅ user-profile.ts
❌ user-profile.component.ts
✅ cart.ts
❌ cart.service.ts
✅ user.ts
❌ user.model.ts
```
---
## Style Guide
### What We Follow (from official docs)
- `inject()` over constructor injection
- `class` and `style` bindings over `ngClass`/`ngStyle`
- `protected` for template-only members
- `readonly` for inputs, outputs, queries
- Name handlers for action (`saveUser`) not event (`handleClick`)
- Keep lifecycle hooks simple - delegate to well-named methods
- One concept per file
```typescript
@Component({...})
export class UserProfileComponent {
// 1. Injected dependencies
private readonly userService = inject(UserService);
// 2. Inputs/Outputs
readonly userId = input.required<string>();
readonly userSaved = output<User>();
// 3. Internal state
private readonly _loading = signal(false);
readonly loading = this._loading.asReadonly();
// 4. Computed
protected readonly displayName = computed(() => ...);
// 5. Methods
save(): void { ... }
}
```
### What We Override
| Official Says | We Do | Why |
|---------------|-------|-----|
| `user-profile.component.ts` | `user-profile.ts` | Redundant - folder tells context |
| `user.service.ts` | `user.ts` | Same |
---
## Commands
```bash
# New project
ng new my-app --style=scss --ssr=false
# Component in feature
ng g c features/products/components/product-card --flat
# Service in feature
ng g s features/products/services/product --flat
# Guard in core
ng g g core/guards/auth --functional
```
---
## Resources
- https://angular.dev/style-guide
© gentleman-programming · MIT · Gentleman-Programming/Gentleman-Skills