@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 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
@@ -66,6 +66,7 @@ npx skilly-hand
66
66
  The catalog currently includes:
67
67
 
68
68
  - `agents-root-orchestrator`
69
+ - `angular-guidelines`
69
70
  - `figma-mcp-0to1`
70
71
  - `skill-creator`
71
72
  - `spec-driven-development`
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 |
@@ -1,5 +1,6 @@
1
1
  [
2
2
  "agents-root-orchestrator",
3
+ "angular-guidelines",
3
4
  "figma-mcp-0to1",
4
5
  "skill-creator",
5
6
  "spec-driven-development",
@@ -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.0",
16
- "changelog": "Added a complete Figma MCP setup-to-canvas guide with orchestrator subskills and full official tool matrix coverage; reduces onboarding ambiguity and improves first-run success rates; affects Figma MCP setup, tool selection, and troubleshooting workflows",
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.1",
16
- "changelog": "Added explicit delta/full guidance, archive rules, task sizing decision tree, and common mistakes section; improves planning clarity and reduces execution ambiguity; affects spec-driven-development SKILL.md usage guidance",
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",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skilly-hand/skilly-hand",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "license": "CC-BY-NC-4.0",
5
5
  "type": "module",
6
6
  "publishConfig": {