@skilly-hand/skilly-hand 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +1 -0
- package/catalog/README.md +1 -0
- package/catalog/catalog-index.json +1 -0
- package/catalog/skills/angular-guidelines/SKILL.md +176 -0
- package/catalog/skills/angular-guidelines/agents/angular-tester.md +130 -0
- package/catalog/skills/angular-guidelines/agents/component-creator.md +124 -0
- package/catalog/skills/angular-guidelines/manifest.json +41 -0
- package/catalog/skills/figma-mcp-0to1/manifest.json +8 -2
- package/catalog/skills/spec-driven-development/SKILL.md +25 -0
- package/catalog/skills/spec-driven-development/manifest.json +8 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,21 @@ All notable changes to this project are documented in this file.
|
|
|
16
16
|
### Removed
|
|
17
17
|
- _None._
|
|
18
18
|
|
|
19
|
+
## [0.6.0] - 2026-04-03
|
|
20
|
+
[View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.6.0)
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
- Added portable skill `angular-guidelines` for Angular-only generation/review workflows, including mandatory latest-stable preflight checks and modern Angular best-practice defaults.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
- _None._
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
- _None._
|
|
30
|
+
|
|
31
|
+
### Removed
|
|
32
|
+
- _None._
|
|
33
|
+
|
|
19
34
|
## [0.5.0] - 2026-04-03
|
|
20
35
|
[View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.5.0)
|
|
21
36
|
|
package/README.md
CHANGED
package/catalog/README.md
CHANGED
|
@@ -5,6 +5,7 @@ Published portable skills consumed by the `skilly-hand` CLI.
|
|
|
5
5
|
| Skill | Description | Tags | Installs For |
|
|
6
6
|
| ----- | ----------- | ---- | ------------ |
|
|
7
7
|
| `agents-root-orchestrator` | Author root AGENTS.md as a Where/What/When orchestrator that routes tasks and skill invocation clearly. | core, workflow, orchestration | all |
|
|
8
|
+
| `angular-guidelines` | Guide Angular code generation and review using latest stable Angular verification and modern framework best practices. | angular, frontend, workflow, best-practices | all |
|
|
8
9
|
| `figma-mcp-0to1` | Guide users from Figma MCP installation and authentication through first canvas creation, with function-level tool coverage and operational recovery patterns. | figma, mcp, workflow, design | all |
|
|
9
10
|
| `skill-creator` | Create and standardize AI skills with reusable structure, metadata rules, and templates. | core, workflow, authoring | all |
|
|
10
11
|
| `spec-driven-development` | Plan, execute, and verify multi-step work through versioned specs with small, testable tasks. | core, workflow, planning | all |
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# Angular Guidelines
|
|
2
|
+
|
|
3
|
+
## When to Use
|
|
4
|
+
|
|
5
|
+
Use this skill when:
|
|
6
|
+
|
|
7
|
+
- You are generating Angular components, directives, pipes, services, or supporting files.
|
|
8
|
+
- You are refactoring existing Angular code to current framework patterns.
|
|
9
|
+
- You are reviewing Angular code quality and framework-alignment in an Angular workspace.
|
|
10
|
+
|
|
11
|
+
Do not use this skill for:
|
|
12
|
+
|
|
13
|
+
- Non-Angular frontend stacks (React, Vue, Svelte, or framework-agnostic UI tasks).
|
|
14
|
+
- Deep architecture decisions outside code artifact generation/review scope.
|
|
15
|
+
- Pure test-strategy design unrelated to Angular implementation details.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Routing Map
|
|
20
|
+
|
|
21
|
+
Choose sub-agents by intent:
|
|
22
|
+
|
|
23
|
+
| Intent | Sub-agent |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| Create, refactor, or review Angular components | [agents/component-creator.md](agents/component-creator.md) |
|
|
26
|
+
| Write or review Angular tests | [agents/angular-tester.md](agents/angular-tester.md) |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Standard Execution Sequence
|
|
31
|
+
|
|
32
|
+
1. Run latest stable Angular preflight checks.
|
|
33
|
+
2. Route to the smallest matching sub-agent by task intent.
|
|
34
|
+
3. Apply the sub-agent checklist before finalizing generated code or review output.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Critical Patterns
|
|
39
|
+
|
|
40
|
+
### Pattern 1: Latest Stable Angular Preflight (Mandatory)
|
|
41
|
+
|
|
42
|
+
Before generating or changing Angular code:
|
|
43
|
+
|
|
44
|
+
1. Check the latest stable Angular core release:
|
|
45
|
+
`npm view @angular/core version`
|
|
46
|
+
2. Check the project's installed or declared Angular version:
|
|
47
|
+
`npm ls @angular/core` or inspect `package.json`.
|
|
48
|
+
3. If versions diverge, generate content for the latest stable APIs and call out upgrade steps.
|
|
49
|
+
4. If npm metadata is unavailable, verify against official Angular release sources before proceeding.
|
|
50
|
+
|
|
51
|
+
Never hardcode a specific Angular major as the default baseline.
|
|
52
|
+
|
|
53
|
+
### Pattern 2: Modern Angular Defaults for New Code
|
|
54
|
+
|
|
55
|
+
Use these defaults unless project constraints explicitly prevent them:
|
|
56
|
+
|
|
57
|
+
| Area | Default |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| Component model | Standalone-first (`standalone: true`) |
|
|
60
|
+
| State + bindings | Signals (`signal`, `computed`, `input`, `output`) |
|
|
61
|
+
| Template flow | `@if`, `@for`, `@switch` control flow blocks |
|
|
62
|
+
| Dependency injection | `inject()` over constructor injection for new code |
|
|
63
|
+
| Forms | Typed reactive forms |
|
|
64
|
+
| Rendering strategy | OnPush-friendly patterns and deferred/lazy rendering where appropriate |
|
|
65
|
+
|
|
66
|
+
### Pattern 3: Generation and Review Guardrails
|
|
67
|
+
|
|
68
|
+
- Keep generated files focused and minimal for the requested artifact.
|
|
69
|
+
- Prefer framework-native patterns over custom abstractions unless required by repo conventions.
|
|
70
|
+
- Call out deprecated patterns in reviewed code and suggest modern Angular replacements.
|
|
71
|
+
- For component-specific work, apply [agents/component-creator.md](agents/component-creator.md).
|
|
72
|
+
- For testing-specific work, apply [agents/angular-tester.md](agents/angular-tester.md).
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Decision Tree
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
Is this an Angular project (angular.json or @angular/core present)?
|
|
80
|
+
NO -> Do not apply this skill
|
|
81
|
+
YES -> Continue
|
|
82
|
+
|
|
83
|
+
Is this a create/generate task?
|
|
84
|
+
YES -> Run latest stable preflight, then generate with modern defaults
|
|
85
|
+
NO -> Continue
|
|
86
|
+
|
|
87
|
+
Is this a refactor task?
|
|
88
|
+
YES -> Preserve behavior, migrate incrementally to modern Angular patterns
|
|
89
|
+
NO -> Continue
|
|
90
|
+
|
|
91
|
+
Is this a review task?
|
|
92
|
+
YES -> Validate latest-stable alignment + best-practice checklist
|
|
93
|
+
NO -> Apply the minimal Angular guidance needed for the request
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Code Examples
|
|
99
|
+
|
|
100
|
+
### Example 1: Standalone + Signals Component
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
import { ChangeDetectionStrategy, Component, computed, input, output } from "@angular/core";
|
|
104
|
+
|
|
105
|
+
@Component({
|
|
106
|
+
selector: "app-badge",
|
|
107
|
+
standalone: true,
|
|
108
|
+
template: `
|
|
109
|
+
<span [attr.data-tone]="tone()">{{ label() }}</span>
|
|
110
|
+
@if (showCount()) {
|
|
111
|
+
<small>{{ count() }}</small>
|
|
112
|
+
}
|
|
113
|
+
`,
|
|
114
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
115
|
+
})
|
|
116
|
+
export class BadgeComponent {
|
|
117
|
+
readonly label = input.required<string>();
|
|
118
|
+
readonly count = input(0);
|
|
119
|
+
readonly increment = output<void>();
|
|
120
|
+
readonly showCount = computed(() => this.count() > 0);
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Example 2: Service with `inject()`
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
import { Injectable, inject } from "@angular/core";
|
|
128
|
+
import { HttpClient } from "@angular/common/http";
|
|
129
|
+
|
|
130
|
+
@Injectable({ providedIn: "root" })
|
|
131
|
+
export class ProfileService {
|
|
132
|
+
private readonly http = inject(HttpClient);
|
|
133
|
+
|
|
134
|
+
getProfile() {
|
|
135
|
+
return this.http.get("/api/profile");
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Review Checklist
|
|
143
|
+
|
|
144
|
+
- Latest stable Angular preflight was completed before code generation/refactor.
|
|
145
|
+
- New artifacts use standalone-first + signal-first patterns where applicable.
|
|
146
|
+
- Template control flow uses modern block syntax.
|
|
147
|
+
- DI and forms follow modern typed Angular practices.
|
|
148
|
+
- Output avoids deprecated Angular APIs unless needed for compatibility.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Commands
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# Latest stable Angular version
|
|
156
|
+
npm view @angular/core version
|
|
157
|
+
|
|
158
|
+
# Workspace Angular version
|
|
159
|
+
npm ls @angular/core
|
|
160
|
+
|
|
161
|
+
# Create a standalone component
|
|
162
|
+
ng generate component <name> --standalone
|
|
163
|
+
|
|
164
|
+
# Apply Angular framework updates in a workspace
|
|
165
|
+
ng update @angular/core @angular/cli
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Resources
|
|
171
|
+
|
|
172
|
+
- Angular docs: https://angular.dev
|
|
173
|
+
- Angular API reference: https://angular.dev/api
|
|
174
|
+
- Angular update guide: https://angular.dev/update-guide
|
|
175
|
+
- Angular blog (official releases): https://blog.angular.dev
|
|
176
|
+
- Angular GitHub releases: https://github.com/angular/angular/releases
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Angular Tester
|
|
2
|
+
|
|
3
|
+
## When to Use
|
|
4
|
+
|
|
5
|
+
Use this sub-agent when:
|
|
6
|
+
|
|
7
|
+
- Adding or updating Angular component/service tests.
|
|
8
|
+
- Reviewing Angular tests for correctness and modern framework usage.
|
|
9
|
+
- Choosing test patterns for async, signal-based, or HTTP-driven behaviors.
|
|
10
|
+
|
|
11
|
+
Do not use this sub-agent for:
|
|
12
|
+
|
|
13
|
+
- Component implementation guidance without tests (use `component-creator`).
|
|
14
|
+
- Framework-agnostic testing standards not tied to Angular behavior.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Runner Policy
|
|
19
|
+
|
|
20
|
+
- Default: Vitest-first in Angular workspaces.
|
|
21
|
+
- Fallback: Use Jasmine/Karma patterns only when the workspace is already configured for Jasmine.
|
|
22
|
+
- Do not force runner migration inside unrelated feature tasks.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Core Testing Patterns
|
|
27
|
+
|
|
28
|
+
- Configure `TestBed` with standalone imports for component tests.
|
|
29
|
+
- Test signal and computed behavior directly when possible.
|
|
30
|
+
- Test signal inputs/outputs using component instance APIs and DOM-triggered events.
|
|
31
|
+
- Cover async behavior with `fakeAsync`/`tick`/`flush` or `waitForAsync`/`whenStable`.
|
|
32
|
+
- For HTTP paths, use `HttpClientTestingModule`/`HttpTestingController` and verify requests.
|
|
33
|
+
- For services, prefer explicit DI setup and clear mocking boundaries.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Command Matrix
|
|
38
|
+
|
|
39
|
+
| Scenario | Preferred Command | Fallback |
|
|
40
|
+
| --- | --- | --- |
|
|
41
|
+
| Run all unit tests | `ng test` | Existing workspace test command |
|
|
42
|
+
| Watch mode | `ng test --watch` | Workspace equivalent |
|
|
43
|
+
| Coverage | `ng test --code-coverage` | Workspace equivalent |
|
|
44
|
+
| CI-style single run | `ng test --watch=false` | Workspace equivalent |
|
|
45
|
+
|
|
46
|
+
If the workspace uses Jasmine/Karma, keep command behavior aligned with existing runner configuration.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Decision Tree
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
Is the target under test a standalone component?
|
|
54
|
+
YES -> Use TestBed with imports: [ComponentUnderTest]
|
|
55
|
+
NO -> Continue
|
|
56
|
+
|
|
57
|
+
Is this primarily service logic?
|
|
58
|
+
YES -> Configure TestBed providers/injection and mock dependencies
|
|
59
|
+
NO -> Continue
|
|
60
|
+
|
|
61
|
+
Is behavior async (timers, promises, stabilization)?
|
|
62
|
+
YES -> Use fakeAsync/tick or waitForAsync/whenStable
|
|
63
|
+
NO -> Continue
|
|
64
|
+
|
|
65
|
+
Does behavior involve HTTP or resource loading?
|
|
66
|
+
YES -> Use HttpTestingController and assert request + response flow
|
|
67
|
+
NO -> Use direct synchronous assertions
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Test Snippets
|
|
73
|
+
|
|
74
|
+
### Standalone Component Test
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
import { ComponentFixture, TestBed } from "@angular/core/testing";
|
|
78
|
+
import { describe, expect, it, beforeEach } from "vitest";
|
|
79
|
+
import { CounterComponent } from "./counter.component";
|
|
80
|
+
|
|
81
|
+
describe("CounterComponent", () => {
|
|
82
|
+
let fixture: ComponentFixture<CounterComponent>;
|
|
83
|
+
|
|
84
|
+
beforeEach(async () => {
|
|
85
|
+
await TestBed.configureTestingModule({
|
|
86
|
+
imports: [CounterComponent]
|
|
87
|
+
}).compileComponents();
|
|
88
|
+
fixture = TestBed.createComponent(CounterComponent);
|
|
89
|
+
fixture.detectChanges();
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("renders default count", () => {
|
|
93
|
+
expect(fixture.componentInstance.count()).toBe(0);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### HTTP Service Test
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
import { TestBed } from "@angular/core/testing";
|
|
102
|
+
import { HttpClientTestingModule, HttpTestingController } from "@angular/common/http/testing";
|
|
103
|
+
|
|
104
|
+
describe("ProfileService", () => {
|
|
105
|
+
it("requests profile", () => {
|
|
106
|
+
TestBed.configureTestingModule({
|
|
107
|
+
imports: [HttpClientTestingModule]
|
|
108
|
+
});
|
|
109
|
+
const service = TestBed.inject(ProfileService);
|
|
110
|
+
const httpMock = TestBed.inject(HttpTestingController);
|
|
111
|
+
|
|
112
|
+
service.getProfile().subscribe();
|
|
113
|
+
|
|
114
|
+
const req = httpMock.expectOne("/api/profile");
|
|
115
|
+
expect(req.request.method).toBe("GET");
|
|
116
|
+
req.flush({ id: "1" });
|
|
117
|
+
httpMock.verify();
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Review Checklist
|
|
125
|
+
|
|
126
|
+
- Tests follow the workspace runner policy (Vitest-first, Jasmine fallback only when preconfigured).
|
|
127
|
+
- Standalone Angular artifacts are tested with appropriate TestBed setup.
|
|
128
|
+
- Signal/input/output behavior is asserted explicitly.
|
|
129
|
+
- Async and HTTP behavior use deterministic Angular testing utilities.
|
|
130
|
+
- Assertions verify user-visible behavior or contract-level outcomes, not incidental internals.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Angular Component Creator
|
|
2
|
+
|
|
3
|
+
## When to Use
|
|
4
|
+
|
|
5
|
+
Use this sub-agent when:
|
|
6
|
+
|
|
7
|
+
- Creating a new Angular component.
|
|
8
|
+
- Refactoring an existing Angular component to modern patterns.
|
|
9
|
+
- Reviewing component implementation details and template patterns.
|
|
10
|
+
|
|
11
|
+
Do not use this sub-agent for:
|
|
12
|
+
|
|
13
|
+
- Directive, pipe, or service implementation.
|
|
14
|
+
- Repository-wide architecture decisions.
|
|
15
|
+
- Test-only tasks (use `angular-tester`).
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Core Rules
|
|
20
|
+
|
|
21
|
+
- Keep explicit `standalone: true` in generated component metadata.
|
|
22
|
+
- Use signal APIs for component IO and state (`input`, `output`, `signal`, `computed`).
|
|
23
|
+
- Use native template control flow blocks (`@if`, `@for`, `@switch`).
|
|
24
|
+
- Prefer `host` object bindings/events over decorator-based host metadata.
|
|
25
|
+
- Use OnPush-friendly reactive patterns and avoid zone-dependent assumptions.
|
|
26
|
+
- For interactive components, include keyboard and ARIA semantics in host bindings.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Template Snippets
|
|
31
|
+
|
|
32
|
+
### Minimal Standalone Component
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { ChangeDetectionStrategy, Component } from "@angular/core";
|
|
36
|
+
|
|
37
|
+
@Component({
|
|
38
|
+
selector: "app-example",
|
|
39
|
+
standalone: true,
|
|
40
|
+
template: `<p>Example works</p>`,
|
|
41
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
42
|
+
})
|
|
43
|
+
export class ExampleComponent {}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Signal Inputs and Outputs
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
import { Component, input, output, computed } from "@angular/core";
|
|
50
|
+
|
|
51
|
+
@Component({
|
|
52
|
+
selector: "app-counter",
|
|
53
|
+
standalone: true,
|
|
54
|
+
template: `<button (click)="increment.emit()">{{ label() }} {{ count() }}</button>`
|
|
55
|
+
})
|
|
56
|
+
export class CounterComponent {
|
|
57
|
+
readonly label = input.required<string>();
|
|
58
|
+
readonly count = input(0);
|
|
59
|
+
readonly increment = output<void>();
|
|
60
|
+
readonly isNonZero = computed(() => this.count() > 0);
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Host Bindings and Events
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
@Component({
|
|
68
|
+
selector: "button[appActionButton]",
|
|
69
|
+
standalone: true,
|
|
70
|
+
template: `<ng-content />`,
|
|
71
|
+
host: {
|
|
72
|
+
"role": "button",
|
|
73
|
+
"[attr.aria-disabled]": "disabled() ? 'true' : null",
|
|
74
|
+
"[class.is-disabled]": "disabled()",
|
|
75
|
+
"(click)": "onClick($event)",
|
|
76
|
+
"(keydown.enter)": "onClick($event)"
|
|
77
|
+
}
|
|
78
|
+
})
|
|
79
|
+
export class ActionButtonComponent {
|
|
80
|
+
readonly disabled = input(false);
|
|
81
|
+
readonly pressed = output<void>();
|
|
82
|
+
|
|
83
|
+
onClick(event: Event) {
|
|
84
|
+
if (this.disabled()) {
|
|
85
|
+
event.preventDefault();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
this.pressed.emit();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Content Projection and Render-Safe Hooks
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
import { Component, afterNextRender } from "@angular/core";
|
|
97
|
+
|
|
98
|
+
@Component({
|
|
99
|
+
selector: "app-card",
|
|
100
|
+
standalone: true,
|
|
101
|
+
template: `
|
|
102
|
+
<header><ng-content select="[card-header]" /></header>
|
|
103
|
+
<section><ng-content /></section>
|
|
104
|
+
<footer><ng-content select="[card-footer]" /></footer>
|
|
105
|
+
`
|
|
106
|
+
})
|
|
107
|
+
export class CardComponent {
|
|
108
|
+
constructor() {
|
|
109
|
+
afterNextRender(() => {
|
|
110
|
+
// Run post-render DOM logic only when needed.
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Review Checklist
|
|
119
|
+
|
|
120
|
+
- Component metadata includes explicit `standalone: true`.
|
|
121
|
+
- Inputs/outputs use modern signal-based APIs where applicable.
|
|
122
|
+
- Templates use native control flow blocks, not legacy structural directives.
|
|
123
|
+
- Host interaction includes required ARIA and keyboard semantics for interactive UI.
|
|
124
|
+
- Change detection and state flow are OnPush-friendly and predictable.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "angular-guidelines",
|
|
3
|
+
"title": "Angular Guidelines",
|
|
4
|
+
"description": "Guide Angular code generation and review using latest stable Angular verification and modern framework best practices.",
|
|
5
|
+
"portable": true,
|
|
6
|
+
"tags": ["angular", "frontend", "workflow", "best-practices"],
|
|
7
|
+
"detectors": ["angular"],
|
|
8
|
+
"detectionTriggers": ["auto"],
|
|
9
|
+
"installsFor": ["all"],
|
|
10
|
+
"agentSupport": ["codex", "claude", "cursor", "gemini", "copilot"],
|
|
11
|
+
"skillMetadata": {
|
|
12
|
+
"author": "skilly-hand",
|
|
13
|
+
"last-edit": "2026-04-03",
|
|
14
|
+
"license": "Apache-2.0",
|
|
15
|
+
"version": "1.1.1",
|
|
16
|
+
"changelog": "Added allowed-modes metadata to declare angular-guidelines sub-agent routing targets; improves discoverability of component-creator and angular-tester delegation modes; affects angular-guidelines manifest metadata",
|
|
17
|
+
"auto-invoke": "Generating, reviewing, or refactoring Angular code artifacts in Angular projects",
|
|
18
|
+
"allowed-modes": [
|
|
19
|
+
"component-creator",
|
|
20
|
+
"angular-tester"
|
|
21
|
+
],
|
|
22
|
+
"allowed-tools": [
|
|
23
|
+
"Read",
|
|
24
|
+
"Edit",
|
|
25
|
+
"Write",
|
|
26
|
+
"Glob",
|
|
27
|
+
"Grep",
|
|
28
|
+
"Bash",
|
|
29
|
+
"WebFetch",
|
|
30
|
+
"WebSearch",
|
|
31
|
+
"Task",
|
|
32
|
+
"SubAgent"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
{ "path": "SKILL.md", "kind": "instruction" },
|
|
37
|
+
{ "path": "agents/component-creator.md", "kind": "instruction" },
|
|
38
|
+
{ "path": "agents/angular-tester.md", "kind": "instruction" }
|
|
39
|
+
],
|
|
40
|
+
"dependencies": []
|
|
41
|
+
}
|
|
@@ -12,9 +12,15 @@
|
|
|
12
12
|
"author": "skilly-hand",
|
|
13
13
|
"last-edit": "2026-04-03",
|
|
14
14
|
"license": "Apache-2.0",
|
|
15
|
-
"version": "1.0.
|
|
16
|
-
"changelog": "Added
|
|
15
|
+
"version": "1.0.1",
|
|
16
|
+
"changelog": "Added allowed-modes metadata to declare figma-mcp-0to1 sub-agent routing targets; improves discoverability of install-auth, tool-function-catalog, canvas-creation-playbook, and troubleshooting-ops delegation modes; affects figma-mcp-0to1 manifest metadata",
|
|
17
17
|
"auto-invoke": "Installing, configuring, or using Figma MCP from setup through first canvas creation",
|
|
18
|
+
"allowed-modes": [
|
|
19
|
+
"install-auth",
|
|
20
|
+
"tool-function-catalog",
|
|
21
|
+
"canvas-creation-playbook",
|
|
22
|
+
"troubleshooting-ops"
|
|
23
|
+
],
|
|
18
24
|
"allowed-tools": [
|
|
19
25
|
"Read",
|
|
20
26
|
"Edit",
|
|
@@ -33,6 +33,31 @@ Recommended task size:
|
|
|
33
33
|
|
|
34
34
|
---
|
|
35
35
|
|
|
36
|
+
## OpenSpec Complementary Support
|
|
37
|
+
|
|
38
|
+
Default execution SHOULD remain the local `.sdd` workflow.
|
|
39
|
+
|
|
40
|
+
Recur to OpenSpec support when the task needs complementary structure for:
|
|
41
|
+
|
|
42
|
+
- Multi-session continuity where planning context must persist across chats.
|
|
43
|
+
- Shareable planning artifacts for review before implementation.
|
|
44
|
+
- Requirement-delta clarity that benefits from explicit change proposals.
|
|
45
|
+
|
|
46
|
+
Routing rules:
|
|
47
|
+
|
|
48
|
+
- Keep the local `.sdd/active/<feature-name>/spec.md` as the execution source of truth unless the team explicitly standardizes on OpenSpec paths.
|
|
49
|
+
- If OpenSpec is unavailable, continue in `.sdd` and document assumptions directly in the active spec.
|
|
50
|
+
|
|
51
|
+
| Use local SDD only | Use OpenSpec support |
|
|
52
|
+
| --- | --- |
|
|
53
|
+
| Single-session or straightforward work with clear requirements | Work spans multiple sessions and needs persistent planning context |
|
|
54
|
+
| Existing `.sdd` artifacts already provide enough review clarity | Team needs proposal/design/tasks artifacts for async review |
|
|
55
|
+
| Requirement changes are small and easy to track in-place | Requirement deltas are complex and need explicit change framing |
|
|
56
|
+
|
|
57
|
+
Reference (informational): [https://openspec.dev/](https://openspec.dev/)
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
36
61
|
## Spec Structure
|
|
37
62
|
|
|
38
63
|
A practical spec includes:
|
|
@@ -12,9 +12,15 @@
|
|
|
12
12
|
"author": "skilly-hand",
|
|
13
13
|
"last-edit": "2026-04-03",
|
|
14
14
|
"license": "Apache-2.0",
|
|
15
|
-
"version": "1.0.
|
|
16
|
-
"changelog": "Added
|
|
15
|
+
"version": "1.0.3",
|
|
16
|
+
"changelog": "Added OpenSpec complementary support routing guidance to spec-driven-development instructions; improves planning continuity and review clarity when local SDD needs reinforcement; affects spec-driven-development SKILL guidance and manifest metadata",
|
|
17
17
|
"auto-invoke": "Planning or executing feature work, bug fixes, and multi-phase implementation",
|
|
18
|
+
"allowed-modes": [
|
|
19
|
+
"plan",
|
|
20
|
+
"apply",
|
|
21
|
+
"verify",
|
|
22
|
+
"orchestrate"
|
|
23
|
+
],
|
|
18
24
|
"allowed-tools": [
|
|
19
25
|
"Read",
|
|
20
26
|
"Edit",
|