@iceinvein/agent-skills 0.1.36 → 0.1.38

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.
Files changed (78) hide show
  1. package/package.json +1 -1
  2. package/skills/bounded-context-auditor/SKILL.md +15 -3
  3. package/skills/bounded-context-auditor/skill.json +1 -1
  4. package/skills/codebase-architecture/SKILL.md +4 -4
  5. package/skills/codebase-architecture/skill.json +1 -1
  6. package/skills/cognitive-load-auditor/SKILL.md +11 -9
  7. package/skills/cognitive-load-auditor/skill.json +1 -1
  8. package/skills/cohesion-analyzer/SKILL.md +1 -1
  9. package/skills/cohesion-analyzer/skill.json +1 -1
  10. package/skills/composability-auditor/SKILL.md +5 -5
  11. package/skills/composability-auditor/skill.json +1 -1
  12. package/skills/contract-enforcer/SKILL.md +5 -5
  13. package/skills/contract-enforcer/skill.json +1 -1
  14. package/skills/coupling-auditor/SKILL.md +2 -2
  15. package/skills/coupling-auditor/skill.json +1 -1
  16. package/skills/cover-letter/SKILL.md +18 -20
  17. package/skills/cover-letter/skill.json +7 -2
  18. package/skills/cover-letter-audit/SKILL.md +20 -20
  19. package/skills/cover-letter-audit/skill.json +7 -2
  20. package/skills/cover-letter-persona/SKILL.md +13 -13
  21. package/skills/cover-letter-persona/skill.json +7 -2
  22. package/skills/cover-letter-rewrite/SKILL.md +18 -16
  23. package/skills/cover-letter-rewrite/skill.json +7 -2
  24. package/skills/cover-letter-write/SKILL.md +25 -20
  25. package/skills/cover-letter-write/skill.json +7 -2
  26. package/skills/cqs-auditor/SKILL.md +19 -47
  27. package/skills/cqs-auditor/skill.json +1 -1
  28. package/skills/demeter-enforcer/SKILL.md +5 -5
  29. package/skills/demeter-enforcer/skill.json +1 -1
  30. package/skills/dependency-direction-auditor/SKILL.md +1 -1
  31. package/skills/dependency-direction-auditor/skill.json +1 -1
  32. package/skills/design-review/SKILL.md +6 -2
  33. package/skills/design-review/skill.json +1 -1
  34. package/skills/error-strategist/SKILL.md +3 -3
  35. package/skills/error-strategist/skill.json +1 -1
  36. package/skills/event-design-reviewer/SKILL.md +3 -3
  37. package/skills/event-design-reviewer/skill.json +1 -1
  38. package/skills/evolution-analyzer/SKILL.md +4 -3
  39. package/skills/evolution-analyzer/skill.json +1 -1
  40. package/skills/gestalt-reviewer/SKILL.md +8 -4
  41. package/skills/gestalt-reviewer/skill.json +1 -1
  42. package/skills/idempotency-guardian/SKILL.md +6 -6
  43. package/skills/idempotency-guardian/skill.json +1 -1
  44. package/skills/improve-my-codebase/CATALOGUE-FIELDS.md +2 -2
  45. package/skills/improve-my-codebase/SKILL.md +68 -27
  46. package/skills/improve-my-codebase/skill.json +1 -1
  47. package/skills/index.json +33 -33
  48. package/skills/integration-pattern-auditor/SKILL.md +2 -2
  49. package/skills/integration-pattern-auditor/skill.json +1 -1
  50. package/skills/magpie/README.md +1 -4
  51. package/skills/magpie/SKILL.md +40 -22
  52. package/skills/magpie/package.json +1 -1
  53. package/skills/magpie/scripts/__tests__/changed-lines.test.ts +66 -0
  54. package/skills/magpie/scripts/__tests__/diff-utils.test.ts +20 -1
  55. package/skills/magpie/scripts/changed-lines.ts +36 -0
  56. package/skills/magpie/scripts/dedupe-cmd.ts +10 -2
  57. package/skills/magpie/scripts/diff-utils.ts +26 -1
  58. package/skills/magpie/scripts/post-cmd.ts +2 -25
  59. package/skills/magpie/scripts/types.ts +8 -0
  60. package/skills/magpie/skill.json +1 -1
  61. package/skills/module-secret-auditor/SKILL.md +8 -5
  62. package/skills/module-secret-auditor/skill.json +1 -1
  63. package/skills/port-adapter-auditor/SKILL.md +3 -3
  64. package/skills/port-adapter-auditor/skill.json +1 -1
  65. package/skills/rams-design-audit/SKILL.md +4 -2
  66. package/skills/rams-design-audit/skill.json +1 -1
  67. package/skills/seam-finder/SKILL.md +2 -2
  68. package/skills/seam-finder/skill.json +1 -1
  69. package/skills/simplicity-razor/SKILL.md +4 -4
  70. package/skills/simplicity-razor/skill.json +1 -1
  71. package/skills/temporal-coupling-detector/SKILL.md +2 -2
  72. package/skills/temporal-coupling-detector/skill.json +1 -1
  73. package/skills/terse/SKILL.md +12 -7
  74. package/skills/terse/skill.json +1 -1
  75. package/skills/type-driven-designer/SKILL.md +8 -8
  76. package/skills/type-driven-designer/skill.json +1 -1
  77. package/skills/unidirectional-flow-enforcer/SKILL.md +2 -2
  78. package/skills/unidirectional-flow-enforcer/skill.json +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iceinvein/agent-skills",
3
- "version": "0.1.36",
3
+ "version": "0.1.38",
4
4
  "description": "Install agent skills into AI coding tools",
5
5
  "author": "iceinvein",
6
6
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bounded-context-auditor
3
- description: Use when the same domain term means different things in different parts of the codebase, when a God Model has grown to serve multiple subsystems with conflicting needs, when teams step on each other modifying shared domain objects, or when deciding where service/module boundaries should be. Trigger on "should this be one service or two?", "why does the User class have 40 fields?", or when a change to one feature breaks an unrelated feature through a shared model. NOT for code-level coupling within a single context, import direction problems, or event payload design within a known context.
3
+ description: Use when the same domain term means different things in different parts of the codebase, when a God Model serves multiple subsystems with conflicting needs, or when deciding where service/module boundaries should be. Trigger on "should this be one service or two?", "why does the User class have 40 fields?", or when a change to one feature breaks an unrelated one through a shared model. NOT for code-level coupling within a single context, import direction, or event payload design.
4
4
  ---
5
5
 
6
6
  # Bounded Context Auditor
@@ -46,7 +46,13 @@ Language is the first signal that boundaries exist. Look for three patterns:
46
46
 
47
47
  ### 2. Draw the Context Map
48
48
 
49
- For each distinct bounded context discovered, document its position in the system using Evans' relationship types:
49
+ For each distinct bounded context discovered, document its position in the system using the context-mapping relationship types (Evans 2003 plus his later context-mapping set):
50
+
51
+ **Partnership**
52
+ - Two contexts (and teams) succeed or fail together; they plan and release in coordination
53
+ - Example: Ordering and Payments ship a combined checkout initiative; neither can deliver alone
54
+ - Distinct from Shared Kernel: the teams coordinate closely but each still owns its own model
55
+ - Risk: coordination cost; use when the mutual dependency is real, not just convenient
50
56
 
51
57
  **Shared Kernel**
52
58
  - Two contexts own the same model together; changes require coordination
@@ -70,7 +76,7 @@ For each distinct bounded context discovered, document its position in the syste
70
76
  - Downstream translates upstream's model to its own language
71
77
  - Example: Fulfillment receives Order from Sales but translates to internal ShippableItem; changes to Order don't touch Fulfillment
72
78
  - Goal: isolation. Downstream only knows upstream's public interface, not internals
73
- - Bidirectional data flow, but translation is one-way
79
+ - The ACL is owned by and protects the downstream; it may translate in both directions, but its loyalty is to the downstream model
74
80
 
75
81
  **Open Host Service**
76
82
  - Upstream publishes a protocol/API specifically for downstreams
@@ -78,6 +84,12 @@ For each distinct bounded context discovered, document its position in the syste
78
84
  - Upside: clear contract, versioning, planned deprecation
79
85
  - Downside: upstream must maintain backward compatibility
80
86
 
87
+ **Published Language**
88
+ - Contexts exchange information via a well-documented shared language (schema, standard format), often paired with Open Host Service
89
+ - Example: contexts integrate through a versioned Avro/JSON schema registry rather than each other's internal models
90
+ - Upside: no context exposes internals; evolution is managed at the schema level
91
+ - Risk: the shared language itself needs governance
92
+
81
93
  **Separate Ways**
82
94
  - No integration between contexts; they genuinely don't interact
83
95
  - Example: Marketing analytics and Warehouse inventory have no integration
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bounded-context-auditor",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Evans-inspired bounded context analysis: detect linguistic fractures, draw context maps, identify leaking language and shared model pollution",
5
5
  "author": "iceinvein",
6
6
  "type": "prompt",
@@ -18,7 +18,7 @@ Design architecture for new projects or review existing codebases. Covers both m
18
18
  - "Map the dependencies in this project"
19
19
  - Codebase feels tangled, coupled, or inconsistent
20
20
 
21
- **Not for:** Reviewing design documents (use `design-integrity-review`), bug hunting (use `find-bugs`), performance optimization.
21
+ **Not for:** Reviewing design documents (use `design-review`), bug hunting, performance optimization.
22
22
 
23
23
  ## Mode Selection
24
24
 
@@ -70,7 +70,7 @@ These drivers determine which patterns are appropriate. A 500-line CLI does not
70
70
 
71
71
  ### Phase 3: Select Architectural Patterns
72
72
 
73
- Using Phase 2 drivers, recommend macro-level patterns from `patterns-reference.md`:
73
+ Using Phase 2 drivers, recommend macro-level patterns from the patterns reference installed alongside this skill (`patterns-reference.md`; on cursor/gemini installs it is named `codebase-architecture-patterns.*`; on codex installs it is not bundled, so name patterns from general knowledge instead):
74
74
  - Overall structure (layered, hexagonal, event-driven, etc.)
75
75
  - Communication style (sync, async, event sourcing)
76
76
  - Data strategy (single DB, CQRS, shared-nothing)
@@ -83,7 +83,7 @@ The most important phase:
83
83
  - Each module gets a clear responsibility (one sentence)
84
84
  - Define interfaces between modules
85
85
  - **Establish dependency direction** — which modules know about which? Dependencies should point toward stable abstractions, not toward volatile details.
86
- - **Name the design patterns** that apply within each module (e.g., "plugin system uses Strategy", "event bus uses Observer"). Refer to `patterns-reference.md`.
86
+ - **Name the design patterns** that apply within each module (e.g., "plugin system uses Strategy", "event bus uses Observer"). Refer to the patterns reference (see Phase 3 for its per-install filename).
87
87
 
88
88
  ### Phase 5: Produce Architecture Spec
89
89
 
@@ -144,7 +144,7 @@ Save to `docs/architecture/architecture-review-YYYY-MM-DD.md`:
144
144
 
145
145
  For each smell or weakness:
146
146
  - What to change and why
147
- - Which pattern to apply (reference `patterns-reference.md`)
147
+ - Which pattern to apply (from the patterns reference; see Phase 3 for its per-install filename)
148
148
  - Impact estimate (how much code changes, risk of breakage)
149
149
  - Priority (high / medium / low) with rationale
150
150
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codebase-architecture",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Architecture review for existing codebases or structured design for new projects, with patterns reference",
5
5
  "author": "iceinvein",
6
6
  "type": "prompt",
@@ -19,19 +19,19 @@ A UI evaluation framework based on Jeff Johnson's *Designing with the Mind in Mi
19
19
  - "This is overwhelming" / "Too many choices" / "Where do I start?"
20
20
  - Navigation with many paths or deep nesting
21
21
 
22
- **Not for:** Visual styling (use Rams' Design Audit), color and typography choices (use Gestalt Reviewer for grouping), accessibility compliance (WCAG), or performance optimization.
22
+ **Not for:** Visual styling and decoration (use `rams-design-audit`), spacing and visual grouping (use `gestalt-reviewer`), accessibility compliance (WCAG), or performance optimization. The three compose on a full UI review.
23
23
 
24
24
  ## The Process
25
25
 
26
26
  ### 1. Apply the Cognitive Laws
27
27
 
28
28
  **Miller's Law — Working memory holds 7±2 items (practically 3-4 groups)**
29
- - Count the number of independent items/options/controls visible at once
30
- - If > 7 items in a flat list, the interface is exceeding working memory
31
- - Fix: chunk into 3-5 labeled groups. The groups themselves become the memory items, and users expand into detail as needed.
32
- - Practical target: aim for 3-4 groups on any single screen. Within each group, 3-5 items.
29
+ - Working memory limits apply to what the user must HOLD IN MIND (items to compare, codes to remember across screens, steps to track), not to what is merely visible: a visible list is externalized and scanned, not memorized (Johnson's own point).
30
+ - Count what the user must actually keep in their head across an interaction; flag flows that require remembering more than 3-4 things (e.g. comparing options that aren't side by side, multi-screen wizards that reference earlier answers).
31
+ - Ungrouped long lists are still a problem, but via scanning cost and decision time (see Hick's Law), not a working-memory violation.
32
+ - Fix: chunk into 3-5 labeled groups so the user scans group labels first, and keep anything that must be remembered visible instead.
33
33
 
34
- **Hick's Law — Decision time = b × log₂(n + 1)**
34
+ **Hick's Law — Decision time = a + b × log₂(n + 1)**
35
35
  - Count the number of choices the user must evaluate before acting
36
36
  - More choices = longer decision time = higher abandonment
37
37
  - Fix: reduce visible choices through progressive disclosure, smart defaults, or recommended options
@@ -93,7 +93,7 @@ Example:
93
93
  ```
94
94
  COGNITIVE LOAD: Project settings page
95
95
  Items visible: 23 settings in a flat list, no grouping
96
- Chunking: none — all 23 items presented equally. Exceeds Miller's Law by 3x.
96
+ Chunking: none — all 23 items presented equally; scanning cost and per-item decisions pile up (Hick's Law)
97
97
  Decision points: each setting is an independent choice — 23 decisions on one page
98
98
  Memory demands: user must scroll up to see project name while editing deploy settings at bottom
99
99
  Primary action: Save button at bottom — not visible without scrolling
@@ -105,13 +105,15 @@ COGNITIVE LOAD: Project settings page
105
105
 
106
106
  Decision engine. After generating UI code, the agent audits its own output for cognitive overload. The report identifies specific violations and concrete fixes. The human sees the audit alongside the component.
107
107
 
108
+ **Acquiring the UI when auditing something the agent didn't just write:** prefer a rendered view (user screenshot, or a browser/screenshot tool if available); otherwise count items, choices, and flows from the component source and routing, and say the audit ran source-only (item counts and flow steps survive that mode; target sizes and visual salience don't).
109
+
108
110
  For complex interfaces where high information density is unavoidable (dashboards, admin panels, IDE-like tools), the agent acknowledges that intrinsic load is high and focuses on eliminating extraneous load rather than demanding everything be simple.
109
111
 
110
112
  ## Common Violations
111
113
 
112
114
  | Violation | Law broken | Fix |
113
115
  |-----------|-----------|-----|
114
- | 20+ items in a flat list | Miller's Law | Chunk into 3-5 labeled groups |
116
+ | 20+ items in a flat list | Hick's Law (scanning/decision cost) | Chunk into 3-5 labeled groups |
115
117
  | 10+ navigation items at same level | Hick's Law | Progressive disclosure, group into categories |
116
118
  | Small, closely-spaced action buttons | Fitts's Law | Increase size, increase spacing, primary action larger |
117
119
  | "Type your account ID" (no autocomplete) | Recognition > recall | Provide selection or autocomplete |
@@ -137,7 +139,7 @@ For complex interfaces where high information density is unavoidable (dashboards
137
139
  | Law | Formula/Rule | Practical Implication |
138
140
  |-----|-------------|----------------------|
139
141
  | **Miller's Law** | Working memory: 7±2 items (practically 3-4 groups) | Chunk information; aim for 3-5 groups per screen |
140
- | **Hick's Law** | Decision time = b × log₂(n + 1) | Fewer choices → faster decisions. Use defaults. |
142
+ | **Hick's Law** | Decision time = a + b × log₂(n + 1) | Fewer choices → faster decisions. Use defaults. |
141
143
  | **Fitts's Law** | Time = a + b × log₂(1 + D/W) | Big close targets for primary actions, small distant for destructive |
142
144
  | **Von Restorff Effect** | Distinct items are remembered better | Make the important thing visually different |
143
145
  | **Serial Position Effect** | First and last items remembered best | Put critical info at top and bottom, not buried in middle |
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cognitive-load-auditor",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Jeff Johnson-inspired cognitive load analysis: evaluate UI against Miller's Law, Hick's Law, Fitts's Law, and working memory limits",
5
5
  "author": "iceinvein",
6
6
  "type": "prompt",
@@ -115,7 +115,7 @@ COHESION: UserService (src/users/service.ts)
115
115
 
116
116
  ## Interaction Model
117
117
 
118
- Decision engine. The agent analyzes cohesion in modules it reviews or refactors, producing the cohesion report. When reviewing existing code, it identifies the lowest-cohesion modules (coincidental and logical first) and recommends targeted extractions. The agent targets the largest, most-changed files first—they're the best signal of cohesion problems. It doesn't aim for every module to reach functional cohesion; it balances practicality (some temporal/procedural cohesion is acceptable in init/shutdown) with clarity (modules should be nameable, testable, and reasonably sized).
118
+ Decision engine. The agent analyzes cohesion in modules it reviews or refactors, producing the cohesion report. When reviewing existing code, it identifies the lowest-cohesion modules (coincidental and logical first) and recommends targeted extractions. The agent targets the largest, most-changed files first—they're the best signal of cohesion problems (rank them with `git log --since="6 months ago" --name-only --pretty=format: | sort | uniq -c | sort -rn | head -20`, cross-checked against line counts). It doesn't aim for every module to reach functional cohesion; it balances practicality (some temporal/procedural cohesion is acceptable in init/shutdown) with clarity (modules should be nameable, testable, and reasonably sized).
119
119
 
120
120
  ## Cohesion vs. Coupling
121
121
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cohesion-analyzer",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Constantine & Yourdon-inspired cohesion analysis: classify module focus on the 7-level spectrum, find split lines, reduce mixed responsibilities",
5
5
  "author": "iceinvein",
6
6
  "type": "prompt",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: composability-auditor
3
- description: Use when functions or modules are hard to reuse because they do too much or assume too much about their environment, when building a new feature requires modifying existing code instead of combining existing units, when functions have hardcoded dependencies on specific data sources or output formats, or when testing requires elaborate setup because the unit manages its own I/O. Trigger on "I need exactly what this does but with slightly different output", "why can't I reuse this?", or when adding a feature means adding a flag to an existing function. NOT for top-level orchestration code, performance-critical paths, or one-off scripts.
3
+ description: Use when functions or modules are hard to reuse because they do too much or assume too much about their environment, when a new feature means modifying existing code instead of combining units, or when testing needs elaborate setup because the unit manages its own I/O. Trigger on "I need exactly what this does but with different output", or when adding a feature means adding a flag. NOT for top-level orchestration code, performance-critical paths, or one-off scripts.
4
4
  ---
5
5
 
6
6
  # Composability Auditor
@@ -145,7 +145,7 @@ Decomposed into three units:
145
145
  ```typescript
146
146
  // Unit 1: Fetch data — takes connection as parameter
147
147
  function fetchOrderReport(db: Database, orderId: string): Report {
148
- const orders = db.query(`SELECT * FROM orders WHERE id = ${orderId}`);
148
+ const orders = db.query("SELECT * FROM orders WHERE id = ?", [orderId]);
149
149
  return formatReport(orders);
150
150
  }
151
151
 
@@ -163,8 +163,8 @@ function sendEmail(service: EmailService, message: EmailMessage): Promise<void>
163
163
  return service.send(message);
164
164
  }
165
165
 
166
- // Composition — caller orchestrates
167
- async function processReport(orderId: string, config: Config) {
166
+ // Composition — caller orchestrates; every dependency arrives as a parameter
167
+ async function processReport(orderId: string, config: Config, emailService: EmailService) {
168
168
  const db = createConnection(config.databaseUrl); // Config passed in
169
169
  const report = fetchOrderReport(db, orderId);
170
170
  const email = prepareReportEmail(report, config.recipientEmail);
@@ -185,7 +185,7 @@ Decision engine. The agent analyzes units in code it writes or reviews, producin
185
185
 
186
186
  ## The Unix Philosophy Reference
187
187
 
188
- McIlroy, Pike, and Thompson articulated four principles (1978):
188
+ McIlroy, Pinson, and Tague articulated four principles in the 1978 Bell System Technical Journal foreword (Pike and Kernighan's *The UNIX Programming Environment*, 1984, later popularized the philosophy):
189
189
 
190
190
  1. **Make each program do one thing well.** Concentrate all efforts on that one thing. Don't clutter the program with unrelated features.
191
191
  2. **Expect the output of every program to become the input of another, yet unknown, program.** Don't insist on interactive input; don't produce extraneous information.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "composability-auditor",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Unix Philosophy-inspired composability analysis: identify reuse blockers, decompose self-sufficient units into composable pieces with standard interfaces",
5
5
  "author": "iceinvein",
6
6
  "type": "prompt",
@@ -15,9 +15,9 @@ A structured correctness framework based on Bertrand Meyer's *Design by Contract
15
15
  - Functions that handle external input, state transitions, or cross-module boundaries
16
16
  - "Is this function correct?" / "What are the edge cases?"
17
17
  - "What does this function guarantee?"
18
- - Reviewing boundary behavior or error handling
18
+ - Reviewing boundary behavior (what a function requires and guarantees)
19
19
 
20
- **Not for:** Trivial getters, simple property access, configuration code, pure mappings with obvious behavior.
20
+ **Not for:** Trivial getters, simple property access, configuration code, pure mappings with obvious behavior. For what happens after valid input enters the system — try/catch strategy, error classification, recovery boundaries — use `error-strategist` (which routes precondition/validation design back here).
21
21
 
22
22
  ## The Process
23
23
 
@@ -132,8 +132,8 @@ These are design decisions, not implementation details. The human owns them.
132
132
 
133
133
  ## The Meyer Principles (Reference)
134
134
 
135
- 1. **Separate commands from queries.** Functions that return values should not have side effects. Functions with side effects should not return values. When you must violate this, document it in the contract.
136
- 2. **Demand no more, promise no less.** Preconditions should be as weak as possible (accept the widest reasonable input). Postconditions should be as strong as possible (guarantee the most specific output).
137
- 3. **The client is responsible for preconditions.** The function does not need to "handle" invalid input gracefully — it needs to fail clearly and immediately when preconditions are violated.
135
+ 1. **Separate commands from queries.** Functions that return values should not have side effects, and vice versa (the dedicated `cqs-auditor` skill covers this in full). When you must violate it, document that in the contract.
136
+ 2. **Demand only what you need, and demand it explicitly.** Require nothing beyond what the implementation truly relies on, but state every requirement precisely; postconditions should guarantee the most specific output you can honestly promise. Meyer's style is demanding: a strong, explicit precondition beats tolerant code that silently accepts anything.
137
+ 3. **The client is responsible for preconditions.** The function does not need to "handle" invalid input gracefully — it needs to fail clearly and immediately when preconditions are violated. Enforce preconditions at trust boundaries (external input, public APIs); internally, assert rather than handle.
138
138
  4. **Inheritance respects contracts.** Subtypes may weaken preconditions (accept more) and strengthen postconditions (guarantee more), but never the reverse.
139
139
  5. **Contracts are documentation that compiles.** The best contracts are checked at runtime (assertions, type narrowing, validation) — not just written in comments.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "contract-enforcer",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Meyer-inspired Design by Contract: preconditions, postconditions, invariants, and failure contracts for non-trivial functions",
5
5
  "author": "iceinvein",
6
6
  "type": "prompt",
@@ -113,7 +113,7 @@ Coupling is about *between* modules. Cohesion is about *within* a module. They'r
113
113
  - **Low coupling + low cohesion** = modules are independent but internally disorganized. Fix the cohesion.
114
114
  - **Low coupling + high cohesion** = the goal. Modules are internally focused and externally independent.
115
115
 
116
- This skill addresses coupling only. If a module has cohesion problems (doing too many unrelated things), that's a signal for the Module Secret Auditor skill.
116
+ This skill addresses coupling only. If a module has cohesion problems (doing too many unrelated things), that's a signal for the `cohesion-analyzer` skill.
117
117
 
118
118
  ## Guard Rails
119
119
 
@@ -131,7 +131,7 @@ This skill addresses coupling only. If a module has cohesion problems (doing too
131
131
  2. **Maximize cohesion within modules.** A module that does one thing well has fewer reasons to couple with others.
132
132
  3. **Coupling type matters more than coupling count.** One content coupling is worse than five data couplings.
133
133
  4. **Coupling is directional.** A depends on B ≠ B depends on A. Map the direction.
134
- 5. **The Law of Demeter operationalizes coupling.** "Don't talk to strangers" a module should only call methods on its direct dependencies, not on objects returned by those dependencies.
134
+ 5. **The Law of Demeter operationalizes coupling.** Later work (Lieberherr's Law of Demeter, 1987, not Constantine & Yourdon) turned this into the "don't talk to strangers" rule: a module should only call methods on its direct dependencies. See the `demeter-enforcer` skill.
135
135
 
136
136
  ## Common Mistakes
137
137
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coupling-auditor",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Constantine & Yourdon-inspired coupling analysis: classify, measure, and reduce interdependence between modules",
5
5
  "author": "iceinvein",
6
6
  "type": "prompt",
@@ -1,15 +1,13 @@
1
1
  ---
2
2
  name: cover-letter
3
3
  description: >
4
- Full-lifecycle cover letter suite. Generates, audits, and rewrites cover letters
5
- from a resume and job description. Produces markdown, DOCX, and PDF outputs.
6
- Optimizes for human-sounding prose, evidence alignment with the resume, and
7
- coverage of the job description's key requirements. Also scores letters for
8
- AI-generated-content risk, structure, correctness, and tone. Use when the user
9
- says "cover letter", "write cover letter", "draft cover letter", "audit cover
10
- letter", "rewrite cover letter", "optimize cover letter", "check cover letter",
11
- or shares a resume and job description together. Route to the right subcommand:
12
- write, audit, rewrite, or persona.
4
+ Use for generic or ambiguous cover-letter requests: the user says "cover
5
+ letter" or "help me apply" without a clear write/audit/rewrite verb, invokes
6
+ /cover-letter, or asks what the suite can do. Routes to the subcommand
7
+ skills and holds the suite's shared conventions (file I/O, naming, state
8
+ directory, writing principles). When the phrasing already names the action
9
+ (write/draft, audit/score, rewrite/fix, persona/voice), trigger that
10
+ subcommand skill directly instead.
13
11
  argument-hint: "[write|audit|rewrite|persona] [...args]"
14
12
  ---
15
13
 
@@ -25,7 +23,7 @@ a human wrote them, fit the job, and match the resume.
25
23
  | `/cover-letter write` | Generate a letter from resume + job description | `cover-letter-write` |
26
24
  | `/cover-letter audit <file>` | Score a letter on content, structure, AI-ness, correctness | `cover-letter-audit` |
27
25
  | `/cover-letter rewrite <file>` | Humanize and realign an existing letter | `cover-letter-rewrite` |
28
- | `/cover-letter persona [create\|list\|use\|show]` | Manage writing voice/tone profiles | `cover-letter-persona` |
26
+ | `/cover-letter persona [create\|list\|use\|show\|delete]` | Manage writing voice/tone profiles | `cover-letter-persona` |
29
27
 
30
28
  When invoked without arguments, list these subcommands and ask which one the
31
29
  user wants.
@@ -65,7 +63,7 @@ Letters are emitted as three sibling files by default:
65
63
 
66
64
  - `<out>/<company>-<role>-<YYYY-MM-DD>.md` (canonical source)
67
65
  - `<out>/<company>-<role>-<YYYY-MM-DD>.docx` (via `pandoc`)
68
- - `<out>/<company>-<role>-<YYYY-MM-DD>.pdf` (via `pandoc` with `--pdf-engine=weasyprint` or `wkhtmltopdf`; fall back to chromium headless if neither is present)
66
+ - `<out>/<company>-<role>-<YYYY-MM-DD>.pdf` (via `pandoc`; the PDF engine fallback chain is defined once, in cover-letter-write's emit step)
69
67
 
70
68
  Default output directory: `./cover-letters/`. Override with `--out <dir>`.
71
69
 
@@ -80,7 +78,7 @@ Personas and session state live at `~/.config/cover-letter/`:
80
78
  ~/.config/cover-letter/
81
79
  ├── personas/ # one JSON per persona
82
80
  ├── active-persona # plain text, contains active persona name
83
- └── last-run.json # last write inputs (for fast rewrite/audit)
81
+ └── last-run.json # written by cover-letter-write step 7; read by audit/rewrite when the user gives no paths
84
82
  ```
85
83
 
86
84
  Create the directory on first write. Never touch anything outside it when
@@ -111,13 +109,13 @@ and rewrite skills enforce them; the audit skill scores against them.
111
109
  "I hope this message finds you well". Every one of these is an AI tell and
112
110
  a wasted first sentence.
113
111
  7. **No sentimental cliches.** A cover letter is not a Hallmark card. Avoid
114
- "hit close to home", "struck a chord", "resonated with me", "spoke to me",
115
- "dream come true", "right up my alley", "a perfect fit", "meant to be",
116
- "the stars aligned", "at the end of the day", "wearing my heart on my
117
- sleeve". These are corny; they signal either AI prose or a writer reaching
118
- for warmth they have not earned with specificity. Replace with a concrete
119
- reason the thing connects: which paragraph of the post, which past project
120
- of yours, which shared problem.
112
+ the likes of "hit close to home", "struck a chord", "resonated with me";
113
+ the canonical list lives in cover-letter-audit's AI phrase list, which the
114
+ audit scores against (do not maintain a second copy here). These are corny;
115
+ they signal either AI prose or a writer reaching for warmth they have not
116
+ earned with specificity. Replace with a concrete reason the thing connects:
117
+ which paragraph of the post, which past project of yours, which shared
118
+ problem.
121
119
  8. **Human closing.** Skip "Please do not hesitate to contact me". A plain
122
120
  sign-off works better.
123
121
  9. **Length.** 250 to 400 words by default. Shorter is almost always better.
@@ -155,7 +153,7 @@ A typical end-to-end flow:
155
153
  1. `/cover-letter persona create` (one-time, or skip for default professional voice)
156
154
  2. `/cover-letter persona use <name>` (optional)
157
155
  3. `/cover-letter write --resume <resume> --jd <jd>` produces the letter plus a self-audit score
158
- 4. If score below 85 or user unhappy, `/cover-letter rewrite <file>` with optional `--focus humanize|tighten|align`
156
+ 4. If the score lands below Strong (under 80 per cover-letter-audit's rating table) or the user is unhappy, `/cover-letter rewrite <file>` with optional `--focus humanize|tighten|align`
159
157
  5. `/cover-letter audit <file>` for a final independent score
160
158
 
161
159
  Each subcommand skill details its own workflow, inputs, and outputs.
@@ -1,10 +1,15 @@
1
1
  {
2
2
  "name": "cover-letter",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Cover letter suite router. Dispatches to write, audit, rewrite, or persona subcommands and shares file I/O (PDF, DOCX, MD/MDX, URL), output formats, and writing conventions across the suite",
5
5
  "author": "iceinvein",
6
6
  "type": "prompt",
7
- "tools": ["claude", "cursor", "codex", "gemini"],
7
+ "tools": [
8
+ "claude",
9
+ "cursor",
10
+ "codex",
11
+ "gemini"
12
+ ],
8
13
  "files": {
9
14
  "prompt": "SKILL.md"
10
15
  },
@@ -1,24 +1,22 @@
1
1
  ---
2
2
  name: cover-letter-audit
3
3
  description: >
4
- Score a cover letter on a 100-point scale across four categories: content and
5
- fit (35), structure (20), voice and humanness (25), correctness (20). Detects
6
- AI-generated-content signals (burstiness, known AI phrase list, vocabulary
7
- diversity, em-dash count), checks that every claim aligns with the resume,
8
- validates job-description coverage without keyword stuffing, flags filler
9
- openers, and produces a prioritized fix list. Works with markdown, DOCX, PDF,
10
- or pasted letter text. Use when the user says "audit cover letter", "score
11
- cover letter", "review cover letter", "check cover letter for AI", "does this
12
- cover letter sound human", "rate my cover letter", "is this cover letter any
13
- good", or shares a finished letter and asks for feedback.
4
+ Use when the user asks to audit, score, rate, or review an existing cover
5
+ letter ("audit cover letter", "does this sound AI", "rate my cover letter",
6
+ "is this any good"), or shares a finished letter asking for feedback.
7
+ Scores 100 points across content/fit, structure, voice/humanness, and
8
+ correctness, detects AI-content signals, and returns a prioritized fix
9
+ list. Accepts markdown, DOCX, PDF, or pasted text. NOT for writing a letter
10
+ (cover-letter-write) or applying edits (cover-letter-rewrite).
14
11
  argument-hint: "<letter-file-or-text> [--resume <file>] [--jd <file|url|text>] [--format md|json|table]"
15
12
  ---
16
13
 
17
14
  # Cover Letter Auditor
18
15
 
19
16
  Score a cover letter and return prioritized fixes. The score combines four
20
- categories to 100 points. A letter at 85+ is publishable; below 75 needs
21
- targeted rework; below 60 should be rewritten.
17
+ categories to 100 points. The Rating table below maps score bands to actions
18
+ and is the single source of truth for thresholds across the cover-letter
19
+ suite; other skills cite it rather than restating numbers.
22
20
 
23
21
  ## Inputs
24
22
 
@@ -41,7 +39,9 @@ Flags:
41
39
  ## Parsing
42
40
 
43
41
  Same extraction tools as `cover-letter-write`. If the letter is a DOCX or PDF,
44
- convert to markdown first via pandoc or pdftotext.
42
+ convert to markdown first via pandoc or pdftotext. If no letter path is given,
43
+ check `~/.config/cover-letter/last-run.json` for the most recent write output
44
+ before asking.
45
45
 
46
46
  ## Scoring rubric
47
47
 
@@ -67,9 +67,9 @@ coverage points: 3 to specificity, 3 to motivation.
67
67
  | Check | Points | Pass criteria |
68
68
  |-------|--------|--------------|
69
69
  | Sections present | 5 | Opening hook, fit/evidence, motivation, close all identifiable |
70
- | Opening | 5 | First sentence is specific and not on the filler-opener list. Generic opener costs all 5 points. |
70
+ | Opening | 5 | First sentence is specific and not a filler opener (the "I am writing to express..." family, items 1-4 of the AI phrase list below). Generic opener costs all 5 points. |
71
71
  | Close | 3 | Two sentences max, no "do not hesitate to contact me", plain sign-off |
72
- | Length | 4 | Word count within target band (default 250-400, or persona band) |
72
+ | Length | 4 | Word count within the declared target band: default 250-400, or the `--length short|standard|long` band from cover-letter-write (150-220 / 250-400 / 380-460) when one was declared or recorded in last-run.json |
73
73
  | Formatting | 3 | No stray markdown headings, no bullet lists, no tables, no code blocks. Letter reads as prose. |
74
74
 
75
75
  ### 3. Voice and Humanness (25)
@@ -78,15 +78,15 @@ coverage points: 3 to specificity, 3 to motivation.
78
78
  |-------|--------|--------------|
79
79
  | Burstiness | 7 | Sentence length standard deviation >= 5 words; at least one sentence under 10 words and one over 20 per paragraph |
80
80
  | AI phrase count | 6 | Zero phrases from the AI phrase list below. Minus 1 per phrase, down to 0. |
81
- | Vocabulary diversity (TTR) | 4 | Type-Token Ratio >= 0.5 for letters over 200 words. Below 0.4 earns 0. |
82
- | Contraction/formality match | 3 | Contraction frequency within persona band (default 0.3-0.6). If no persona, accept 0.2-0.7. |
81
+ | Vocabulary diversity (TTR) | 4 | Type-Token Ratio >= 0.5 for letters over 200 words earns 4; 0.40-0.49 earns 2; below 0.4 earns 0. |
82
+ | Contraction/formality match | 3 | Contraction frequency within ±0.15 of the persona's `contraction_frequency` scalar (default persona 0.4 → accept 0.25-0.55). If no persona, accept 0.2-0.7. |
83
83
  | Em-dash count | 2 | Zero em-dashes. Em-dashes are a strong AI-output signal; each one costs both points. |
84
- | Passive voice | 3 | At most 10% of clauses in passive voice (or persona cap) |
84
+ | Passive voice | 3 | At most 10% of sentences in passive voice (or persona cap) |
85
85
 
86
86
  #### AI phrase list
87
87
 
88
- Flag any occurrence of these, case-insensitive. Extends the blog-analyze list
89
- with cover-letter-specific killers:
88
+ Flag any occurrence of these, case-insensitive. This is the canonical list for
89
+ the whole cover-letter suite (write and rewrite reference it):
90
90
 
91
91
  Cover-letter specific:
92
92
 
@@ -1,10 +1,15 @@
1
1
  {
2
2
  "name": "cover-letter-audit",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Scores a cover letter on 100 points across content/fit, structure, voice/humanness, and correctness; detects AI-generated-content signals and produces a prioritized fix list",
5
5
  "author": "iceinvein",
6
6
  "type": "prompt",
7
- "tools": ["claude", "cursor", "codex", "gemini"],
7
+ "tools": [
8
+ "claude",
9
+ "cursor",
10
+ "codex",
11
+ "gemini"
12
+ ],
8
13
  "files": {
9
14
  "prompt": "SKILL.md"
10
15
  },
@@ -1,14 +1,13 @@
1
1
  ---
2
2
  name: cover-letter-persona
3
3
  description: >
4
- Create and manage writing personas for cover letters using the NNGroup 4-dimension
5
- tone framework (funny-serious, formal-casual, respectful-irreverent, enthusiastic-
6
- matter-of-fact) adapted for professional correspondence. Personas define readability
7
- target, sentence length distribution, contraction frequency, passive voice cap, and
8
- do/don't lists. Used by cover-letter-write and cover-letter-rewrite to enforce a
9
- consistent voice across all applications. Use when the user says "persona",
10
- "voice", "tone", "writing style", "make it sound more formal", "more casual",
11
- "create persona", "use persona", or asks how to tune the voice of their letters.
4
+ Use when the user wants to tune the voice of their cover letters: "persona",
5
+ "voice", "tone", "writing style", "make it sound more formal/casual",
6
+ "create persona", "use persona". Manages reusable writing personas on the
7
+ NNGroup 4-dimension tone framework; personas set readability, sentence
8
+ lengths, contraction frequency, passive-voice cap, and do/don't lists,
9
+ consumed by cover-letter-write and cover-letter-rewrite. NOT for one-off
10
+ edits to a letter (cover-letter-rewrite).
12
11
  argument-hint: "[create|list|use|show|delete] [persona-name]"
13
12
  ---
14
13
 
@@ -36,7 +35,7 @@ Create the directory on first run. Use kebab-case filenames (e.g.,
36
35
  |---------|---------|
37
36
  | `/cover-letter persona create [name]` | Interactive interview; writes a new persona file |
38
37
  | `/cover-letter persona list` | Show all saved personas |
39
- | `/cover-letter persona use <name>` | Set the active persona for this session |
38
+ | `/cover-letter persona use <name>` | Set the active persona (persists until changed) |
40
39
  | `/cover-letter persona show <name>` | Print full persona profile |
41
40
  | `/cover-letter persona delete <name>` | Remove a persona file (ask to confirm) |
42
41
 
@@ -173,10 +172,11 @@ should I go with?"
173
172
 
174
173
  ## List command
175
174
 
176
- Glob `~/.config/cover-letter/personas/*.json` and render:
175
+ Glob `~/.config/cover-letter/personas/*.json` and render ("Updated" is the
176
+ persona file's modification time; no schema field needed):
177
177
 
178
- | Persona | Stage | Tone hint | Last used |
179
- |---------|-------|-----------|-----------|
178
+ | Persona | Stage | Tone hint | Updated |
179
+ |---------|-------|-----------|---------|
180
180
  | senior-eng-default | senior | serious, mid-formal | 2026-04-20 |
181
181
  | casual-startup | senior | serious, casual | 2026-04-24 |
182
182
 
@@ -189,7 +189,7 @@ Read the named persona JSON. Write its name to
189
189
 
190
190
  ```
191
191
  Active persona: senior-eng-default
192
- - Tone: serious (0.75), mid-formal (0.45), respectful (0.25), matter-of-fact (0.45)
192
+ - Tone: serious (0.75), mid-formal (0.45), respectful (0.25), mid-enthusiastic (0.45)
193
193
  - Sentence length target: 17 words ± 8
194
194
  - Contractions: 40%; passive cap: 10%
195
195
  - Signature: "Best,\nAlex Chen\nalex@example.com | portfolio.example.com"
@@ -1,10 +1,15 @@
1
1
  {
2
2
  "name": "cover-letter-persona",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Reusable writing personas built on the NNGroup 4-dimension tone framework, adapted for professional correspondence and used by cover-letter-write and cover-letter-rewrite",
5
5
  "author": "iceinvein",
6
6
  "type": "prompt",
7
- "tools": ["claude", "cursor", "codex", "gemini"],
7
+ "tools": [
8
+ "claude",
9
+ "cursor",
10
+ "codex",
11
+ "gemini"
12
+ ],
8
13
  "files": {
9
14
  "prompt": "SKILL.md"
10
15
  },